自增長主鍵回顯實現,批次資料插入

白茶花约發表於2024-03-06
 1 package com.atsyc.api.preparedstatement;
 2 
 3 import org.junit.Test;
 4 
 5 import java.sql.*;
 6 
 7 public class PSOtherPart {
 8     /*
 9      * TODO:
10      *      t_user插入一條資料,並且獲取資料庫自增長的主鍵
11      *      使用總結:
12      *              1.在建立prepareStatement的時候,告知,攜帶回資料庫增長的主鍵
13      *              2.獲取裝主鍵值的結果及物件,一行一列,獲取對應資料
14      *
15      * TODO:
16      *      使用批次插入的形式插入一萬條資料
17      *      使用總結:
18      *              1.路徑後面新增?rewriteBatchedStatements=true,允許批次插入
19      *              2.insert into --- values[必須寫]語句尾不能新增;結束
20      *              3.不是執行語句每條,是批次新增addBatch();
21      *              4.遍歷新增完畢後,統一批次執行
22      */
23     @Test
24     public void returnPrimaryKey() throws Exception {
25         Class.forName("com.mysql.cj.jdbc.Driver");
26         Connection connection = DriverManager.getConnection("jdbc:mysql:///atsyc?rewriteBatchedStatements=true","root","Yican030615");
27         String sql = "INSERT into t_user(account,password,nickname) values (?,?,?)";
28         PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
29 
30         long start = System.currentTimeMillis();
31 
32         for(int i=0;i<10000;i++) {
33             statement.setObject(1, "test3"+i);
34             statement.setObject(2, "123333"+i);
35             statement.setObject(3, "主鍵獲取測試員pro"+i);
36             //statement.executeUpdate();  //普通新增執行需要近十秒,下面批次新增僅需0.3秒
37             statement.addBatch();  //不執行,追擊到values後面
38         }
39 
40         statement.executeBatch();  //執行批次操作
41 
42         long end = System.currentTimeMillis();
43 
44         /*
45         if(i>0){
46             System.out.println("資料插入成功!");
47             //獲取回顯的主鍵
48             //獲取裝主鍵的結果集物件 一行一列 id=值
49             ResultSet resultSet = statement.getGeneratedKeys();
50             resultSet.next();
51             int id = resultSet.getInt(1);
52             System.out.println("id = " + id);
53         }else{
54             System.out.println("資料插入失敗!");
55         }
56         */
57 
58         System.out.println("執行10000次資料插入消耗的時間 = "+(end-start));
59 
60         statement.close();
61         connection.close();
62     }
63 }

相關文章