この記事では、完全に他の誰かのをコピーします。
原題:Javaは、データベース(-2スピード最適化方法)にバッチデータを実装しました
オリジナル住所:https://blog.csdn.net/qy20115549/article/details/52699724
オリジナルは明確に見えた、オリジナルの会場をご覧ください。
データベースへの接続
パッケージデシベル。 インポートのjava.sql.Connection; インポートのjava.sql.DriverManager。 / * *合肥工业大学管理学院qianyang [email protected] * / パブリック クラスはMySQLConnections { プライベート文字列ドライバ= "" ; プライベート文字列するDBURL = "" ; プライベート文字列のユーザ=「」; プライベート文字列のパスワード=「」; プライベート 静的の MySQLConnections接続= nullを。 プライベート MySQLConnections()スロー例外{ ドライバ= "はcom.mysql.jdbc.Driver" 。 するDBURL = "はjdbc:mysqlの://127.0.0.1:3306 /テスト" ; ユーザー =「ルート」。 パスワード = "112233" ; System.out.println( "するDBURL:" + するDBURL)。 } パブリック 静的接続のgetConnection(){ 接続CONN = NULL ; もし(接続== nullの){ 試み{ 接続 = 新しいMySQLConnections(); } キャッチ(例外e){ e.printStackTrace(); リターン ヌル。 } } 試みる{ Class.forNameの(connection.driver)。 CONN = たDriverManager.getConnection(connection.dbURL、 connection.user、connection.password)。 } キャッチ(例外e){ e.printStackTrace(); } 戻りCONN。 } }
二つの方法のバッチ処理
一度最初の方法は、データベース内のすべての5000のレコード、。つまり、それぞれの提出はもちろん、最後の時間ではないかもしれないが、5000を記録しました。また、一つの方法は、デフォルトの提出を使用することです。どちらも、優れた処理速度です。15秒程度50000のレコード。
用パッケージ変更DB; インポートのjava.sql.Connection、 インポートのjava.sql.PreparedStatement; インポートjava.sql.SQLExceptionという; / * *肥大学[email protected]管理Qianyang * / パブリック クラスMySQLUpdate { 静的接続CON = MySQLConnections。 getConnection(); 静的 PreparedStatementのSTMT = NULL ; パブリック 静的 int型 executelnsert()がスローSQLExceptionが{ INT I = 0 ; // バッチ処理の組数 INT BATCHSIZE = 5000; のstmt = con.prepareStatement( "(上記ID上、名前)INSERT INTO mysqltest" + "値(、)??" ); // 近いトランザクションを自動的に提出、この行を追加する必要があり con.setAutoCommit(偽) のために(INT 0 = J; J <50005; J ++ ){ ++ I; stmt.setInt( 1 、J); stmt.setString( 2、 "名称" ); stmt.addBatch(); IF(I BATCHSIZE%== 0 ) { stmt.executeBatch(); con.commit(); } } IF(!のBatchSizeの%I = 0 ){ stmt.executeBatch(); con.commit(); } を返す私を; } 公共の 静的な 無効 executeInsert2を()スローするSQLException { // この行を追加する必要があります、閉じる自動トランザクションがコミット 詐欺を。 (にsetAutoCommit falseに); STMT = con.prepareStatement( "INSERT INTOのmysqltest1(ID、名前)" + "値(、)??" ); のための(INT J = 0; J <50002; J ++ ){ stmt.setInt(。1 、J)。 stmt.setString( 2、 "名前"); stmt.addBatch(); } stmt.executeBatch()。 con.commit(); stmt.close(); con.close(); } }
mainメソッド
用パッケージ変更、メイン インポートjava.sql.SQLExceptionという、 インポートdb.MySQLUpdate; / * *肥大学[email protected]管理Qianyang * / パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数)がスローSQLExceptionが{ // begin1 =にSystem.currentTimeMillisロング(); // MySQLUpdate.executeInsert(); // ロングEND1 =にSystem.currentTimeMillis(); // するSystem.out.println( "実行時間がある:" +(END1-begin1) ) ; ロング begin2 = にSystem.currentTimeMillis(); MySQLUpdate.executeInsert1()。 長い END2 = にSystem.currentTimeMillis(); のSystem.out.println( "ランタイムは:" +(end2- begin2)); } }