读《Java核心技术》笔记。
虽然每天都在使用Hibernate,但是对JDBC只是在了解的层面,只知道建立连接可以在此基础上进行增删改查,今天读到JDBC可以在结果集的基础上实时操作,与数据库终端工具的操作非常类似,虽然在实际工作中用到较少还是做个笔记。
1、可滚动可更新的结果集:可以在查询结果集的基础上直接更新表
Statement statementSensitive = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
在创建StateMent或者PrepareStateMent的时候增加参数
ResultSet.TYPE_SCROLL_SENSITIVE
ResultSet.CONCUR_UPDATABLE
前者表示结果集“可滚动”并且对数据库变化敏感,如果有数据有更新会反应到resultset中;后者表示数据可更新。
ResultSet resultSet2 = statementSensitive.executeQuery("SELECT * FROM STUDENT");
while(resultSet2.next()) {
System.out.println(resultSet2.getString(2) + resultSet2.getString("Gender"));
resultSet2.updateString("Gender", "女");
resultSet2.updateRow()
}
这里使用ResultSet.updatexxx方法更新数据,更新之后必须使用
resultSet2.updateRow();
将更改通知数据库。
2、支持问题:并不是所有的数据库都支持
通过如下方法可以查看数据库是否支持相关特效
// mysql 不支持
connection.getMetaData().supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE)
// mysql 支持
connection.getMetaData().supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE)
// mysql支持
connection.getMetaData().supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)
已测试的mysql 5 数据库为例,并不支持TYPE_SCROLL_SENSITIVE特性,所以不能支持实时更新;
支持ResultSet.CONCUR_UPDATEABLE,可以在结果集上更新;
3、优缺点
- 优点:可以针对每条结果做实时更新
- 缺点:在B/S架构中并不适用,而且长时间占用连接,大部分操作其实Update语句就可以完成
4、结论
特性很好,但是实际操作中并不适用,不过适合做数据库工具终端。