jdbc中next()的使用

原创 2016年03月07日 16:04:48

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

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

ResultSet中next()方法中的一个陷阱。

例如有如下代码:……ResultSet rs=s.executeQuery("select * from friends");……如果想直接用rs.getXXX(X)的方法读取第一行的数据时会出现异常...
  • kamiiyu
  • kamiiyu
  • 2006年06月15日 01:41
  • 7527

NextResult()方法

        使用数据访问类时遇到这样一种需求:在执行一个存储过程时希望返回两个结果集.按以往的做法,必定是写成两个存储过程来实现,这样数据库往返两趟,牺牲了一点效率.由于数据量大,在使用IData...
  • lincnl
  • lincnl
  • 2007年07月03日 17:26
  • 3148

(5)关于JDBC中rs.next()的注意事项

public String getMessage(String username, String password) { String sql = "SELECT * FROM USER WH...
  • Xuan6251237011
  • Xuan6251237011
  • 2013年12月04日 23:14
  • 1769

用NextResult方法取得多个Result Set

http://dotnet.chinaitlab.com/ADONET/757364.html 从 ADO.NET 1.x 开始,DataReader 就可以在单一次的查询动作中,「批次 (...
  • smeyou
  • smeyou
  • 2014年03月05日 18:03
  • 1229

JDBC中rs.next()的思考

编程过程中发现这样的问题:ResultSet rs, 当执行好查询之后操作比如 rs.getInt(1),会发生异常: com.microsoft.sqlserver.jdbc.SQLServerEx...
  • dowson2002
  • dowson2002
  • 2006年08月09日 10:05
  • 2893

ResultSet.next() 非常慢

ResultSet.next() 非常慢 今天遇到一个问题, java中执行ResultSet.next() 非常慢。 详细情况 SQL语句如下 select * from ( ...
  • tiaya
  • tiaya
  • 2017年08月18日 17:44
  • 427

JDBC--Result 获取返回集合

package jdbc.chap05; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql...
  • Vangogh_java
  • Vangogh_java
  • 2016年09月27日 20:51
  • 3173

if(rs.next()) 和 while(rs.next())

接口 ResultSet boolean next() throws SQLException 将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方...
  • just_tigris
  • just_tigris
  • 2016年08月23日 22:38
  • 629

while (rs.next()) 与 if(rs.next())的区别

如果说是"判断结果集里有没有值" 那么用if(rs.next)  while是用来做循环输出的 换句话说 就是"如果结果集里还有值" 没有则停止循环 这个一般在JSP做显示用 1、rs ...
  • xyffly
  • xyffly
  • 2017年02月22日 15:22
  • 1784

jdbc中next()的使用

/** 最近在使用Java实现一个业务查询的小程序。需求是根据检索业务系统表中是否存在异常的交易或申请等情况。 我的实现思路是:按照数据异常的检索条件直接从表中查询结果,然后判断结果集是否存在,如果不...
  • carmelo2243
  • carmelo2243
  • 2016年03月07日 16:04
  • 1070
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jdbc中next()的使用
举报原因:
原因补充:

(最多只允许输入30个字)