Java JDBC 学习笔记 - 可更新的结果集

时间:2021-01-28 12:05:56

读《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、结论
特性很好,但是实际操作中并不适用,不过适合做数据库工具终端。