1、createStatement();
2、createStatement(int resultSetType, int resultSetConcurrency)
3、createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)
其中resultSetType可选值是:
1、ResultSet.TYPE_FORWARD_ONLY :
在ResultSet中只能先前移动游标,只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响.
2、ResultSet.TYPE_SCROLL_INSENSITIVE :
在ResultSet中可以随心所欲的先前向后移动游标,不会受到其他用户对该数据库所作更改的影响
3、ResultSet.TYPE_SCROLL_SENSITIVE :
在ResultSet中可以随心所欲的先前向后移动游标,这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。
同时
ResultSet的值有所改变的时候,他可以得到改变后的最新的值其中
resultSetConcurrency
(第二个参数默认为CONCUR_READ_ONLY:指定不可以更新 ResultSet
CONCUR_UPDATABLE:指定可以更新 ResultSet)
可选值是:
1、ResultSet.CONCUR_READ_ONLY 在ResultSet中的数据记录是只读的,可以修改
2、ResultSet.CONCUR_UPDATABLE 在ResultSet中的数据记录可以任意修改,然后更新会数据库其中resultSetHoldability
可选值是:
1、ResultSet.HOLD_CURSORS_OVER_COMMIT 表示修改提交时,不关闭ResultSet的游标
2、ResultSet.CLOSE_CURSORS_AT_COMMIT 表示修改提交时,关闭ResultSet的游标
demo
Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs2 = stmt.executeQuery("SELECT * FROM user");
rs2.next();
rs2.updateDate("lastdatetime", new Date(Calendar.getInstance().getTimeInMillis())); rs2.updateRow();
rs2.afterLast();
while(rs2.previous())
{ /**....*/ } rs.beforeFirst();
while(rs2.next())
{ /**....*/ } rs.last();
rs.first();
rs.absolute(5); //游标移动到第5条
rs.absolute(-1); //游标移动到最后一条
rs.relative(-5); //游标向上移动5条
rs.relative(2); //游标向下移动2条
rs.deleteRow(); //删除当前行
rs.last(); //游标移动到最后
rs.updateString("summary", "This is ...");//设置更新的字段值
rs.cancelRowUpdates();//取消刚才输入的更新
rs.getRow();//得到当前行号
rs.moveToInsertRow(); //游标移动到要新增的那条记录上
rs.updateInt("id", 1);
rs.updateString(2, "my name");
rs.insertRow(); //插入新记录
JDBC2.0提供的还有一个功能就是数据库的批量操作:
con.setAutoCommit(false);
Statement stmt3 = con.createStatement();
stmt3.addBatch("insert ....."); //push
stmt3.addBatch("insert ....."); //push
int[] rows = stmt3.executeBatch();
con.commit();
但是有一点要注意,stmt3.executeBatch()他不会自动给你回滚数据操作,当你有5条update语句的时候,如果第三条发生错误,那么将无法自动回滚前两条update语句的影响,所以一定要自己手工进行事务管理。