JDBC API 可滾動可編輯的結果集
JDBC的API中的鏈接數據和創建statement並且執行讀取ResultSet大家已經很熟悉了,這邊介紹設置statement的屬性使結果集可以移動並且進行編輯同步回數據庫。
Statement 有兩個屬性分別用來設置結果集ResultSet是否可以滾動以及是否可以編輯同步回數據庫。
圖片來自《java核心技術卷II-高級特性》,推薦閱讀。
具體使用上代碼:
try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("數據庫鏈接成功!"); try (Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)) { String command = "insert into a_dept(name) values(‘1‘),(‘2‘)"; int count = statement.executeUpdate(command); System.out.println("受影響行數:" + count); String selectSql = "select * from a_dept"; try (ResultSet resultSet = statement.executeQuery(selectSql)) { while (resultSet.next()) { System.out.print("修改前id " + resultSet.getInt("id") + "的值是: "); System.out.println(resultSet.getString("name")); resultSet.updateString("name", "我是修改過的"); resultSet.updateRow(); System.out.print("修改後id " + resultSet.getInt("id") + "的值是: "); System.out.println(resultSet.getString("name")); } resultSet.moveToInsertRow(); resultSet.updateString("name", "我是插入的"); resultSet.insertRow(); resultSet.beforeFirst(); System.out.println("打印出所有的值:"); while (resultSet.next()) { System.out.print(resultSet.getInt("id") + ": "); System.out.println(resultSet.getString("name")); } } } }
再貼上輸出結果:
顯而易見,從數據庫取出的值在ResultSet中就被修改了,並且也被插入了一條新的數據。
1、在最後打印出所有的值之前有一行代碼
resultSet.beforeFirst();
這行代碼的作用是把ResultSet的遊標移動到結果集第一行之前,這樣子調用next()方法可以讓遊標下移進行讀取下一行的數據。顯而易見,在設置ResultSet.TYPE_SCROLL_SENSITIVE之前我們訪問結果集只能夠從頭到尾訪問,而現在我們可以隨意的異動遊標訪問任一行.
2、再看修改數據的那一段代碼,
resultSet.updateString("name", "我是修改過的"); resultSet.updateRow();
我們修改數據是使用updateXXX()方法進行修改,相應的還有updateInt()、updateBytes()、updateTime()等相對應的方法。
而在修改完成之後需要調用updateRow()方法,該方法會提交我們對這一行結果集的修改,需要註意的是如果我們沒有提交對這一行的修改而繼續訪問下一行,那我們的修改就會作廢。
3、看插入數據的那一段代碼:
resultSet.moveToInsertRow(); resultSet.updateString("name", "我是插入的"); resultSet.insertRow();
執行插入操作的話需要先調用 moveToInsertRow() 方法把遊標移動到特定的位置(我們無法控制插入的位置),之後再執行插入操作插入需要插入的column(我設計的表只有兩個column:id和name,id是自動增長的,所以我只需要插入name)
在插入需要插入的column之後,需要調用insertRow()方法將新建的行發送給數據庫,這才算是完成了插入操作。
4、我們其實還可以使用deleteRow()方法來進行刪除當前遊標所指定的行。
JDBC API 可滾動可編輯的結果集