以下是使用PrepareStatement
對象進行批處理的典型步驟順序 -
- 使用占位符創建SQL語句。
- 使用
prepareStatement()
方法創建PrepareStatement
對象。 - 使用
setAutoCommit()
將自動提交設置為false
。 - 使用
addBatch()
方法在創建的Statement
對象上添加SQL語句到批處理中。 - 在創建的
Statement
對象上使用executeBatch()
方法執行所有SQL語句。 - 最后,使用
commit()
方法提交所有更改。
此示例代碼是基於前面章節中完成的環境和數據庫設置編寫的。
以下代碼片段提供了使用PrepareStatement
對象的批量更新示例,將下面代碼保存到文件:BatchingWithPrepareStatement.java -
// Import required packages // See more detail at http://www.yiibai.com/jdbc/ import java.sql.*; public class BatchingWithPrepareStatement { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/EMP"; // Database credentials static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] args) { Connection conn = null; PreparedStatement stmt = null; try{ // Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); // Open a connection System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // Create SQL statement String SQL = "INSERT INTO Employees(id,first,last,age) " + "VALUES(?, ?, ?, ?)"; // Create preparedStatemen System.out.println("Creating statement..."); stmt = conn.prepareStatement(SQL); // Set auto-commit to false conn.setAutoCommit(false); // First, let us select all the records and display them. printRows( stmt ); // Set the variables stmt.setInt( 1, 400 ); stmt.setString( 2, "Python" ); stmt.setString( 3, "Zhang" ); stmt.setInt( 4, 33 ); // Add it to the batch stmt.addBatch(); // Set the variables stmt.setInt( 1, 401 ); stmt.setString( 2, "C++" ); stmt.setString( 3, "Huang" ); stmt.setInt( 4, 31 ); // Add it to the batch stmt.addBatch(); // Create an int[] to hold returned values int[] count = stmt.executeBatch(); //Explicitly commit statements to apply changes conn.commit(); // Again, let us select all the records and display them. printRows( stmt ); // Clean-up environment stmt.close(); conn.close(); }catch(SQLException se){ //Handle errors for JDBC se.printStackTrace(); }catch(Exception e){ //Handle errors for Class.forName e.printStackTrace(); }finally{ //finally block used to close resources try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// nothing we can do try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); }//end finally try }//end try System.out.println("Goodbye!"); }//end main public static void printRows(Statement stmt) throws SQLException{ System.out.println("Displaying available rows..."