Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)
ResultSet.TYPE_FORWARD_ONLY 只能向前滚动
ResultSet.TYPE_SCROLL_SENSITIVE 当他人同时操作时,会影响结果集
ResultSet.TYPE_SCROLL_INSENSITIVE 当他人同时操作时,不会影响结果集
ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。
resultSetConcurency是设置ResultSet对象能够修改的,取值如下:
ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
以下两种方法的共性:返回可滚动的结果集,当数据库变化时,当前结果集同步改变。
不可用结果集更新数据库:
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
可用结果集直接更新数据库:
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATETABLE);
###########################################################################
在Statement不能滚动不能更新的情况下:
boolean next() 游标移至下一个记录的位置,如果下一个记录不存在,返回false
各种各样的getXXX方法,放回相应行的相应数据.
在Statement可以滚动的情况下:
boolean first() 游标移至第一个记录的位置,如果ResultSet是空的,返回false
boolean last() 游标移至最后一个记录的位置,如果ResultSet是空的,返回false
boolean isFirst() 如果现在游标在第一个记录的位置,返回true
boolean isLast() 如果现在游标在最后一个记录的位置,返回true
void beforeFirst() 游标移至第一个记录之前的位置
void afterLast() 游标移至最后一个记录之后的位置
boolean isBeforeFirst() 如果现在游标在第一个记录之前的位置,返回true
boolean isAfterLast() 如果现在游标在最后一个记录之后的位置,返回true
boolean previous() 游标移至上一个记录的位置,如果上一个记录不存在,返回false
int getRow() 获得游标当前行的号码,从1开始
boolean absolute(int) 若参数为正,游标移至第参数个记录的位置上,若为负,移至倒数第参数个记录的位置上,如果移动之后,游标指向的位置有记录,返回true.
boolean relative(int) 若参数为政,游标自当前位置向后移动参数个位置,若为负,向前移,如果移动之后,游标指向的位置有记录,返回true.
在Statement可以更新的情况下:
分三种情况.
一:更新一行的记录
通过next(),previous(),absolute(),relative()等方法将游标移至要更新的记录的位置
使用各种各样的updateXXX方法,更新相应类型的数据.
调用updateRow()方法,将更新结果更新至数据库.
在updateRow()之前,可以调用cancelRowUpdate()撤销对当前行的修改.
如果不调用updateRow(),虽然更新结果不会更新至数据库,但是ResultSet中的数据却被更新了.
二:插入一行记录
首先,调用moveToInsertRow(),将游标移至一个特殊的插入行位置.
调用updateXXX()方法,对插入行各列进行更新.
调用insertRow(),将插入行的数据插入数据库.
调用moveToCurrentRow(),将游标移回调用moveToInsertRow()之前的位置.
三:删除一行的记录
将游标移至要删除的记录的位置,调用deleteRow()方法.