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 }