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呼び出しの数を減らすので、バッチ更新は多くのレコードを挿入したい場合、パフォーマンス上の利点があります。