/**
最近在使用Java实现一个业务查询的小程序。需求是根据检索业务系统表中是否存在异常的交易或申请等情况。
我的实现思路是:按照数据异常的检索条件直接从表中查询结果,然后判断结果集是否存在,如果不存在,则数据正常;如果存在,显示这些异常交易等数据
*/
jdbc中,预编译SQL语句后,我们经常使用如下方式来判断结果集的状态:
while (result.next()) {
//code...
result.getString("id");
}
而我在使用的过程中,需要首先判断结果集中是否存在数据,于是就使用了if进行判断,如下:
if (!result.next()) {
//code...
}
然后问题就出现了,通过判断得知结果集存在(有异常交易等数据),但无法从结果集中取出数据。代码如下:
if (!result.next()) {//数据正常
//code...
} else {//数据异常
//通过while循环遍历取出数据
while (result.next()) {
//code...
result.getString("id");
}
}
这种写法有个问题是:当结果集中只有一条记录时,会跳过while循环,也就得不到正常的确认结果。
出现问题的原因在于next()方法的用法:
next()方法用来判断下一条记录是否存在,执行一次,游标就后移一次。初始情况下,游标位于第一条记录之前,也就是说执行一次后,游标移动到第一条记录的位置,随着循环调用依次后移,移动到最后一条记录之后时结束。
如果,结果集中只存在一条记录,那么执行一次后,游标移动到该条记录位置。当再次调用next()方法时,游标就会移动到该条记录之后,那么执行就会结束。
上述代码中,因为在使用if判断时调用了一次next()方法,所以,当遇到结果集中只有一条记录的情况时,接下来在else分支中再次调用next()时就取不到结果了。
我在解决这个问题时,用了个笨办法,即:
if (!result.next()) {//数据正常
//code...
} else {//数据异常
//关闭结果集,然后重新进行执行查询
result.close();
result = pre.executeQuery();
//通过while循环遍历取出数据
while (result.next()) {
//code...
result.getString("id");
}
}
/**
这样写可能会导致性能问题,但由于我所查询的表中记录数并不是很大,所以带来的影响不大。
才疏学浅,暂时没想到更好的方法。
*/

802

被折叠的 条评论
为什么被折叠?



