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()

涵數將會使遊標向後移動,使的數據更新失敗.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章