ResultSet的问题 我用while(rs.next())取完ResultSet里的值之后 这个ResultSet是不是就为空了 我要想在这之后继续使用 怎么把ResultSet的指针再指向第一行之前? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在创建Statement时可以指定参数Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 可以指定ResultSet可以重新定位 1)先在 DatabaseMetaData 类的方法boolean supportsResultSetType(int type)和方法boolean supportsResultSetConcurrency(int type, int concurrency)判断当前驱动支不支持滚动结果集或可更新结果集2)一些解释 TYPE_FORWARD_ONLY 不可滚动 TYPE_SCROLL_INSENSITIVE 可滚动,但对于此次查询后的数据库相关表的更新不敏感(推荐 )TYPE_SCROLL_SENSITIVE 可滚动且敏感CONCUR_READ_ONLY ResultSet中的内容是只读的 (推荐)CONCUR_UPDATABLE 可被更新回数据库 3)所以一般是这样Statement stat = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 然后可以当读到最后之后 while (rs.previous()) 或rs.beforeFirst();while(rs.next()) 要避免反复控制Resultset,只从它读出一次到你本地的对象中,然后本地操作这个对象来处理。 若问 难道不能rs.beforeFirst()? 我记得用完了 还是可以回去的啊 要回退的话需要要在实例的时候给定参数,具体参数google下。 jdbc默认的ResultSet只能是只进只读的。 +1JDBC 2.0新特性就支持结果集滚动操作了TYPE_FORWARD_ONLY:该常量指示指针只能向前移动的 ResultSet 对象的类型。TYPE_SCROLL_SENSITIVE:该常量指示可滚动并且通常受其他的更改影响的 ResultSet 对象的类型。CONCUR_UPDATABLE:该常量指示可以更新的 ResultSet 对象的并发模式。绝对定位:boolean absolute(int row)将游标移动到指定位置。相对定位:void afterLast()将游标向后移动一位。void beforeFirst() 。将游标向前移动一位。boolean first()将游标移动到结果集最前boolean last()将游标移动到结果集末尾。 不过LZ为什么要继续使用当前结果集呢?这个结果集不会和数据库进行实时更新,很容易出现脏数据, 在创建Statement时可以指定参数Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 可以指定ResultSet可以重新定位 既然取出ResultSet里的值了,保存起来,以后再用时就没必要再从ResultSet取了 lz可以查下JavaAPI,可以使用可滚动的结果集,MySQL和Oracle都是支持的 本帖最后由 c_hua6280 于 2010-12-20 11:01:58 编辑 保存到自己的Vector里面,想怎么搞就怎么搞 java 连接数据库问题 JNA如何模拟C中的void*数据类型? java怎么画点? 两人玩的俄罗斯方块双方行为不能同时被控制? 菜鸟级 类型不兼容 [高手请进]为什么VC中的gethostbyaddr比JAVA中的getByName解析的域名要多 JBuilder Borland Make 居然不能编译import不属于任何包的class,解决全部分 上哪去download《Java 2 高级开发指南》的源码? linux下做得java应用程序,怎么样制作安装程序? tomcat4中怎样设置classpath? 求教UDP协议发送数据包的大小问题 java 文件操作,急!求高手進來看一下
2)一些解释
TYPE_FORWARD_ONLY 不可滚动
TYPE_SCROLL_INSENSITIVE 可滚动,但对于此次查询后的数据库相关表的更新不敏感(推荐 )
TYPE_SCROLL_SENSITIVE 可滚动且敏感
CONCUR_READ_ONLY ResultSet中的内容是只读的 (推荐)
CONCUR_UPDATABLE 可被更新回数据库
3)所以一般是这样
Statement stat = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
然后可以当读到最后之后 while (rs.previous())
或rs.beforeFirst();while(rs.next())
JDBC 2.0新特性就支持结果集滚动操作了TYPE_FORWARD_ONLY:
该常量指示指针只能向前移动的 ResultSet 对象的类型。
TYPE_SCROLL_SENSITIVE:
该常量指示可滚动并且通常受其他的更改影响的 ResultSet 对象的类型。
CONCUR_UPDATABLE:
该常量指示可以更新的 ResultSet 对象的并发模式。
绝对定位:boolean absolute(int row)将游标移动到指定位置。
相对定位:void afterLast()将游标向后移动一位。
void beforeFirst() 。将游标向前移动一位。
boolean first()将游标移动到结果集最前
boolean last()将游标移动到结果集末尾。 不过LZ为什么要继续使用当前结果集呢?这个结果集不会和数据库进行实时更新,很容易出现脏数据,