JDBC文の例 – バッチ更新
次に、バッチ処理でJDBCの `Statement`を使用してレコードを挿入する方法を示します。
dbConnection.setAutoCommit(false); statement = dbConnection.createStatement(); statement.addBatch(insertTableSQL1); statement.addBatch(insertTableSQL2); statement.addBatch(insertTableSQL3); statement.executeBatch(); dbConnection.commit();
__完全なJDBCバッチ更新の例を参照してください。
package com.mkyong.jdbc; import java.sql.DriverManager; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.text.DateFormat; import java.text.SimpleDateFormat; public class JDBCBatchUpdateExample { private static final String DB__DRIVER = "oracle.jdbc.driver.OracleDriver"; private static final String DB__CONNECTION = "jdbc:oracle:thin:@localhost:1521:MKYONG"; private static final String DB__USER = "user"; private static final String DB__PASSWORD = "password"; private static final DateFormat dateFormat = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss"); public static void main(String[]argv) { try { batchInsertRecordsIntoTable(); } catch (SQLException e) { System.out.println(e.getMessage()); } } private static void batchInsertRecordsIntoTable() throws SQLException { Connection dbConnection = null; Statement statement = null; String insertTableSQL1 = "INSERT INTO DBUSER" + "(USER__ID, USERNAME, CREATED__BY, CREATED__DATE) " + "VALUES" + "(101,'mkyong','system', " + "to__date('" + getCurrentTimeStamp() + "', 'yyyy/mm/dd hh24:mi:ss'))"; String insertTableSQL2 = "INSERT INTO DBUSER" + "(USER__ID, USERNAME, CREATED__BY, CREATED__DATE) " + "VALUES" + "(102,'mkyong','system', " + "to__date('" + getCurrentTimeStamp() + "', 'yyyy/mm/dd hh24:mi:ss'))"; String insertTableSQL3 = "INSERT INTO DBUSER" + "(USER__ID, USERNAME, CREATED__BY, CREATED__DATE) " + "VALUES" + "(103,'mkyong','system', " + "to__date('" + getCurrentTimeStamp() + "', 'yyyy/mm/dd hh24:mi:ss'))"; try { dbConnection = getDBConnection(); statement = dbConnection.createStatement(); dbConnection.setAutoCommit(false); statement.addBatch(insertTableSQL1); statement.addBatch(insertTableSQL2); statement.addBatch(insertTableSQL3); statement.executeBatch(); dbConnection.commit(); System.out.println("Records are inserted into DBUSER table!"); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { if (statement != null) { statement.close(); } if (dbConnection != null) { dbConnection.close(); } } } private static Connection getDBConnection() { Connection dbConnection = null; try { Class.forName(DB__DRIVER); } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); } try { dbConnection = DriverManager.getConnection( DB__CONNECTION, DB__USER,DB__PASSWORD); return dbConnection; } catch (SQLException e) { System.out.println(e.getMessage()); } return dbConnection; } private static String getCurrentTimeStamp() { java.util.Date today = new java.util.Date(); return dateFormat.format(today.getTime()); } }
結果
バッチ更新プロセスを介して3つのレコードがデータベースに挿入されます。
なぜバッチ更新を使用する必要がありますか?
上記のバッチ更新は、次のように通常の `executeUpdate()`メソッドと同じです:
statement.executeUpdate(insertTableSQL1); statement.executeUpdate(insertTableSQL2); statement.executeUpdate(insertTableSQL3);
`executeBatch()`はデータベースへのJDBC呼び出しの数を減らすので、バッチ更新は多くのレコードを挿入したい場合、パフォーマンス上の利点があります。