JDBC ResultSet数据更新

    JDBC 采用ResultSet方式更新数据库的时候,有机几点需要注意.首先,就是采用的select语句,当使用*作为搜索返回结果集的

时候,JDBC将默认的将ResultSet强制设置为ReadOnly模式.

    如果采用ResultSet的更新模式,需要将statement设置为ResultSet.CONCUR_UPDATABLE.

 

Statement 的参数:

默认设置:statement 为Type_FORWARD_ONLY并带有并发CONCUR_READ_ONLY.的并发级别.

 

       TYPE_FORWARD_ONLY,表示指针只能向前移动

       TYPE_SCOLL_INSENSITIVE 可滚动但通常不受其它的更改影响.

       TYPE_SCOLL_SENSITIVE 可滚动,并且通常受其它的更改影响.

 

当使用ResultSet的update的时候,一定需要将游标定位到当前行,否则程序不会抛出异常,但是数据会更新错误

conn.setAutoCommit(false);
            pstm = conn
                    .prepareStatement(getTotalNum,
                            ResultSet.TYPE_FORWARD_ONLY,
                            ResultSet.CONCUR_UPDATABLE);
            pstm.setString(1, "total");
            ResultSet rs = pstm.executeQuery();
            while (rs.next()) {
                Integer total = Integer.valueOf(rs.getString("value"));
                total -= 2;
                System.out.println(total);
                rs.updateInt("value", total);
                rs.updateRow();
            }               //------------------------ 1
           
            conn.commit();

 

 

上述片段能够正常更新数据,但是如果当rs.updateRow()防在1之后,该数据将不能正常的更新,原因在于当使用rs.next()

涵数将会使游标向后移动,使的数据更新失败.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值