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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值