之前发现一个问题,用statement取resultSet时,得到的resultSet不能回滚,比如说取第1,2,3个元素后,你再想去取第一个数据,会报错,不能调用previous函数。并且,如果第一个取的是后边的元素,游标也会相应的移动到那里,无法回滚,也就是比如,你直接取第4个元素,能取出来,但是你就取不到第1,2,3个了。
查资料后发现,是用connection创建statement时未加参数直接创建造成的,即
myConnection.createStatement()
较为合适的写法应该是:
myConnection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
然后之后需要回去的时候只需要resultSet.previous()+resultSet.next();,或者resultSet.first()即可
另外,createStatement的可选参数如下:
第一个参数可以取值为
ResultSet.RTYPE_FORWORD_ONLY:这是缺省值,只可向前滚动;
ResultSet.TYPE_SCROLL_INSENSITIVE:双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
ResultSet.TYPE_SCROLL_SENSITIVE:双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
第二个参数可以取值为
ResultSet.CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
ResultSet.CONCUR_UPDATABLE:指定可以更新 ResultSet
附:这是老版的JDBC2.0才有的问题