melo学习日记

iOS初学者,数据库从业者...

jdbc中next()的使用

/**
最近在使用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");
    }
}

/**
这样写可能会导致性能问题,但由于我所查询的表中记录数并不是很大,所以带来的影响不大。
才疏学浅,暂时没想到更好的方法。
*/

阅读更多
文章标签: java jdbc
个人分类: 运维日志
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭