sql设置id自动增长_JDBC进阶(一):批处理与获取自增长列的值
生活随笔
收集整理的這篇文章主要介紹了
sql设置id自动增长_JDBC进阶(一):批处理与获取自增长列的值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、批處理
假如要插入一萬條記錄到數據表中,那么使用普通的方法就要執行一萬次插入操作,這樣會頻繁打開和關閉數據庫連接,導致執行速度變慢。
因此可以使用批處理機制將多條語句一次性提交給數據庫批量處理。
批處理的相關API:
- void addBatch() —— 將一組參數添加到 PreparedStatement 對象的批處理命令中。
- int[] executeBatch() —— 將一批SQL命令提交給數據庫來執行,如果全部命令執行成功,則返回更新計數組成的數組。
- void chearBatch() —— 清空此 Statement 對象的當前 SQL 命令列表。
示例:使用批處理機制向Student表插入1008條記錄
// 參數: // jdbc協議:postgresql子協議://主機地址:數據庫端口號/要連接的數據庫名 String url = "jdbc:postgresql://localhost:5432/test2"; // 數據庫用戶名 String user = "postgres"; // 數據庫密碼 String password = "123456";// 1. 加載Driver類,Driver類對象將自動被注冊到DriverManager類中 Class.forName("org.postgresql.Driver");// 2. 連接數據庫,返回連接對象 Connection conn = DriverManager.getConnection(url, user, password);// 3. 預編譯SQL語句 String sql = "INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept) " + "VALUES(?, ?, ?, ?, ?);"; PreparedStatement pstmt = conn.prepareStatement(sql);// 4. 批處理,向Student表中插入1008條記錄 for(int i = 0; i < 1008; i++) { // 設置一條記錄的參數 pstmt.setString(1, "sno" + i); pstmt.setString(2, "student" + i); pstmt.setString(3, "男"); pstmt.setInt(4, 20); pstmt.setString(5, "CS");// 將一條記錄的參數添加到批處理命令中 pstmt.addBatch();// 每100條執行一次批處理 if(i % 100 == 0) { pstmt.executeBatch(); // 將100條插入記錄命令提交給數據庫來執行 pstmt.clearBatch(); // 清空此Statement對象的當前SQL命令列表 } } // 將剩余的8條插入記錄命令提交給數據庫執行 pstmt.executeBatch(); pstmt.clearBatch();// 關閉資源 pstmt.close(); conn.close();二、獲取自增長列的值
數據表通常都具有主碼自增長的功能,比如Oracle的Sequence機制、MySQL的AUTO_INCREMENT以及PostgreSQL的Serial數據類型。
如果使用JDBC往數據庫表中插入一條新記錄,要想獲取主碼新增長的值,則需要再進行一次查詢操作,這樣不夠方便。
因此比較理想的方式是在進行數據插入操作時就能獲取到自增長列對應的值,JDBC也提供了這樣的功能。
相關API:
- PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) —— 創建一個默認 PreparedStatement 對象,該對象能獲取數據表自動生成的鍵值。
參數autoGeneratedKeys - 指示是否應該返回自動生成的鍵值,它可以是 Statement.RETURN_GENERATED_KEYS 或Statement.NO_GENERATED_KEYS
- ResultSet getGeneratedKeys() —— 獲取由于執行此 Statement 對象而創建的所有自動生成的鍵。如果此 Statement 對象沒有生成任何鍵,則返回空的 ResultSet 對象。
示例:獲取用戶表的自增長列的值
首先在PostgreSQL中創建一張t_user表,其中主碼id具有自增長功能:
CREATE TABLE t_user(id SERIAL PRIMARY KEY,name CHAR(20), password CHAR(20) );然后在JDBC中往表插入一條記錄,獲取新插入記錄的主碼自增長值:
// 省略參數代碼...// 1. 加載Driver類,Driver類對象將自動被注冊到DriverManager類中 Class.forName("org.postgresql.Driver");// 2. 連接數據庫,返回連接對象 Connection conn = DriverManager.getConnection(url, user, password);// 3. 預編譯SQL, 獲取PreparedStatement對象 String sql = "INSERT INTO t_user(name, password) VALUES(?, ?);"; // 創建一個默認 PreparedStatement 對象,該對象能獲取自動生成的鍵。 PreparedStatement pstmt = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);// 4. 設置參數,并將SQL語句傳給數據庫執行 pstmt.setString(1, "張三"); pstmt.setString(2, "123456"); pstmt.executeUpdate();// 5. 獲取主碼自增長的值,以ResultSet類的形式返回 ResultSet rs = pstmt.getGeneratedKeys(); while(rs.next()) {System.out.println("主碼自增長值為: " + rs.getInt(1)); }控制臺打印輸出:
總結
以上是生活随笔為你收集整理的sql设置id自动增长_JDBC进阶(一):批处理与获取自增长列的值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维随机变量期望公式_概率论笔记-Ch4
- 下一篇: php 字符组成数组,php分割字符串并