前端datagrid("getSelections")问题&后台SQL查询问题

来源:互联网 发布:中山大学附属医院 知乎 编辑:程序博客网 时间:2024/06/04 19:18

1、今天开发的时候碰到一个问题,使用var rows = $("#a").datagrid("getSelections");获取选中的datagrid数据行时,无论选取了多少行,返回结果都是只有一行。

而且如果选取了多行,然后取消其中一行,返回结果将为0.

查询了相关资料,了解到以下结果:

datagrid("getSelections")获取选中行是根据所选行的idField进行区分的,即如果idField是不变的话,无论选取多少行,返回的结果都只有一行。

查询了项目代码之后,发现果然是idField出了问题,原本的groupId变成了groupid,所以idField不再是从数据库中获取的唯一标识符groupId而是一个垃圾值groupid。

将其改过来之后即可。

另外需要注意,如果需要判断选取结果是0的情况,即if(rows.length == 0 || rows == null),那么在这之前不能使用类似name = rows[0].name之类的语句进行取值。否则当没有选取rows时,无法执行该if语句中的代码。在使用中,需要在该if语句中加上一句return false;   然后将name = rows[0].name之类的语句放在该if代码块之后执行。


2、后台SQL查询问题

说来也很惭愧,犯了一个很基础的问题。

因为需要使用的SQL语句比较长,所以在代码中对其进行了换行,即:

</pre><pre name="code" class="java">String sql = "select * from table1 t1"+ "left join table2 t2"+ "on t1.xx = t2.xx";


开始我写的代码就是和这个比较类似的,然后程序报错,查看错误信息,发现是查询语句的问题。一看,原来因为在换行的时候没有考虑到字符串连接时没有空格的问题,导致SQL语句出错。

更改为如下代码即可:

String sql = "select * from table1 t1 "+ "left join table2 t2 "+ "on t1.xx = t2.xx";

同时还遇到的问题是sql语句执行失败。

查找原因,发现是EntityManager中createNativeQuery和createQuery的问题。

createNativeQuery用于SQL语句查询,createQuery语句用于JPQL语句查询。

SQL语句使用createQuery的话会报unexcept token的错误,使用createNativeQuery就可以了。

createNativeQuery之后使用getResultList即可得到返回的查询结果列表了。


0 1
原创粉丝点击