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

バッチ更新 jdbc リンク://タグ/ステートメント/[ステートメント]