以下是使用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..."