JDBCを使用してデータ挿入のためにMySQLデータベースに接続する場合、特に大量のデータが継続的に挿入されます(100,000)。効率を改善する方法は?
JDBCプログラミングインターフェイスには、特に注目に値する2つの声明の方法があります。
データのバッチ処理は、addbatch()とexecuteBatch()メソッドaddBatch()を使用して達成できます。
ただし、最初にデータベースリンク、 connection.setAutoCommit(false)にマニュアルコミットを設定し、ステートメントの実行後にconnection.commit()を実行する必要があることに注意してください。
java.io.bufferedreader; Import java.io.ioexception; Import java.sql.drivermanager; import java.sql.preparedStatement; Import Java.sql.sqlexception; Import java.util.date; import com.mysql.jdbc.connection; public class strince; sql = "db_testに挿入(param1、param2、param3、param4、param5)値(?、?、?、?、?)";プライベート文字列charset = "utf-8"; private string connectStr = "jdbc:mysql:// localhost:3306/test";プライベート文字列username = "root";プライベート文字列パスワード= "123456"; private void dostore()throws classNotFoundException、sqlexception、ioException {class.forname( "com.mysql.jdbc.driver"); connectStr += "?useServerprepstmts = false&rewriteBatchedStatements = true"; //これは、効率的なバッチ挿入のテストであり、実行接続conn =(接続)drivermanager.getConnection(connectstr、username、password)の後に通常のバッチ挿入が削除されます。 conn.setautocommit(false); //マニュアル提出を設定しますint count = 0; preatedStatement PSTS = conn.Preparestatement(SQL);文字列line = null;日付開始= new date(); for(int i = 0; i <= 100000; i ++){psts.setString(1、i+"param1"); psts.setString(2、i+"param2"); psts.setString(3、i+"param3"); psts.setString(4、i+"param4"); psts.setString(5、i+"param5"); psts.addbatch(); //バッチ処理++を追加します。 } psts.executeBatch(); // batch Processing conn.commit()を実行します。 //日付終了= new Date();を送信します。 System.out.println( "Quantion ="+count); System.out.println( "runtime ="+(end.getTime() - begin.getTime())); conn.close(); } public static void main(string [] args){try {new mysqlbatchutil()。dostore(); } catch(classNotFoundException e){e.printstacktrace(); } catch(sqlexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }}}テスト結果:
数量= 100001
実行時間= 4725
合計10W、実行時間には47秒かかります。
この効率はまだ高くなく、望ましい効果を達成していないようで、さらなる改善が必要です。
パラメーターは、MySQL JDBC接続文字列に追加することもできます。
RewriteBatchedStatements = true
MySQLはデフォルトでバッチ処理をオフにしており、このパラメーターを介してオンになります。このパラメーターは、データベースに送信されたSQLステートメントを書き換えることができます。
useServerprepstmts = false
有効になっていない場合(outeserverprepstmts = false)、com.mysql.jdbc.preparedStatementをローカルSQLアセンブリに使用し、最後にDBに送信します。交換されたのは最終的なSQLです。
少し改善されています。次のステートメントを接続文字列に追加します(コードコンストラクターのコメントを削除します):
connectStr += "?ueseServerprepstmts = false&rewriteBatchedStatements = true";
テスト結果は次のとおりです。
数量= 100001
実行時間= 1213
同じ量のデータを使用すると、今回は実行に12秒しかかかりませんでした。これは、処理効率が大幅に改善されたことを示しています。ハハ
上記は、JDBCを使用して10WのデータをMySQLデータベースバッチに挿入するテスト効率です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!