首頁 > 資料庫 > mysql教程 > 如何使用Java的PreparedStatement有效率地將多行插入MySQL?

如何使用Java的PreparedStatement有效率地將多行插入MySQL?

Linda Hamilton
發布: 2024-12-20 15:31:09
原創
429 人瀏覽過

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

透過PreparedStatement向MySQL中插入多行使用PreparedStatement

在Java中,可以使用PreparedStatement的處理來高效地向批次表中插入多行處理能力。以前,為每一行執行單獨的 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板