ホームページ >データベース >mysql チュートリアル >Java の PreparedStatement を使用して MySQL に複数の行を効率的に挿入するにはどうすればよいですか?

Java の PreparedStatement を使用して MySQL に複数の行を効率的に挿入するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-20 15:31:09429ブラウズ

How Can I Efficiently Insert Multiple Rows into MySQL Using Java's PreparedStatement?

PreparedStatement を使用して PreparedStatement を使用して MySQL に複数の行を挿入する

Java では、PreparedStatement のバッチを使用して MySQL テーブルに複数の行を効率的に挿入できます。処理能力。以前は、行ごとに個別の SQL ステートメントを実行するのが一般的でした:

for (String element : array) {
    myStatement.setString(1, element[0]);
    myStatement.setString(2, element[1]);

    myStatement.executeUpdate();
}

ただし、パフォーマンスを最適化するために、MySQL では一度に複数の行を挿入できる構文を提供しています:

INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...]

PreparedStatement でこのアプローチを使用するにはバッチが必要です処理:

  1. PreparedStatement の作成: SQL ステートメントを準備し、各行のパラメーターを設定します。 addBatch() を使用して各ステートメントをバッチに追加します。
  2. バッチを実行します: すべての行が追加されたら、executeBatch() を呼び出してバッチ全体を実行します。このメソッドは、各ステートメントによって影響を受ける行数を示す更新カウントの配列を返します。

プロセスを示す例は次のとおりです。

public void save(List<Entity> entities) throws SQLException {
    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
    ) {
        int i = 0;

        for (Entity entity : entities) {
            statement.setString(1, entity.getSomeProperty());
            // ...

            statement.addBatch();
            i++;

            if (i % 1000 == 0 || i == entities.size()) {
                statement.executeBatch(); // Execute every 1000 items.
            }
        }
    }
}

1000 行ごとにバッチを実行JDBC ドライバーまたはデータベースによってバッチ サイズに課せられる潜在的な制限を回避するのに役立ちます。

JDBC チュートリアルを参照してください。バッチ更新に PreparedStatement オブジェクトと Statement オブジェクトを使用する方法の詳細については、

以上がJava の PreparedStatement を使用して MySQL に複数の行を効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。