日期:2014-05-20  浏览次数:20835 次

java.sql.ResultSet.next()问题
当结果集java.sql.ResultSet为空(没有记录),调用java.sql.Result.next()时会抛出SQLException异常。
为什么?
Java code

141 
142             rs = cstmt.executeQuery();
143             while(rs.next()){
144                 HashMap<String,Object> column = new HashMap<String,Object>();
145                 ResultSetMetaData rsm = rs.getMetaData(); 
146                 for(int column_count = 1;column_count != rsm.getColumnCount()+1;column_count++){          
147                     column.put(rsm.getColumnName(column_count),rs.getObject(column_count));
148                 }
149                 result_list.add(column);
150             }
151         }catch(SQLException e){
152             throw e;



这里当rs为空(没有记录)调用next(),上层调用方法就收到异常。但在API中,这样说的
Returns:
  true if the new current row is valid; false if there are no more rows 
Throws:
  SQLException - if a database access error occurs or this method is called on a closed result s
你们有没有遇到这样的情况?


------解决方案--------------------
当结果集java.sql.ResultSet为空(没有记录),调用java.sql.Result.next()时不会抛异常的
如果你的程序中抛出了异常,你还是好好的看一下异常堆栈信息吧
------解决方案--------------------
是不是executeQuery方法写得有问题,导致后面next出问题了?