2016-12-04 6 views
0

私は1000のInsert SQL文を持つ1つのArrayListを持っています。実行時間では、このArrayListのIteratorまたは(for forループ)の待ち時間は、1分となります。私のJFrameはこの期間に応答していません。私に何ができる?おかげイテレータまたはforeachの待ち時間

Iterator itr = stms.iterator(); 
     while (itr.hasNext()) {     

      DB_STM.executeUpdate((String) itr.next()); 
     } 
+0

コード全体を投稿してください! –

+2

イテレータを責めないでください、それを遅くする 'executeUpdate'です。 – Kayaman

+3

イベントディスパッチスレッドで低速コードを実行しないでください。 SwingWorkerを使用します。 –

答えて

1

foreachは内部JDBCからの一括更新および挿入を処理するために、唯一のiteratorを使用して、あなただけに関係示すhere

この問題としてaddBatch()PreparedStatementexecuteBatch()を使用してバッチ更新を使用することができますループの内部レイテンシあなたは私と一緒に に同意しますか?

いいえ、私は同意しません。基本的に、コードには設計上の問題はほとんどありません。

(1)(SwingWorkerが示唆しているように)一括処理をバックグラウンドで(時間の点で)&する必要があります。

(2)JDBC addBatch()およびexecuteBatch()を使用して、データベースのヒットを減らします。&は、パフォーマンスを向上させます。

+0

ありがとう私の親愛なる。問題は存在する!この問題はループの内部遅延に関係しています。あなたは私の意見に賛成ですか ? – DanialAbdi

+0

上記の更新された回答を確認してください。 – developer

+0

ご意見ありがとうございます。私は問題を発見した。私のdbはmySQLのcoummunityです!私はmysqlのクエリ領域に純粋なSQL文をコピーします。状況はそれです。 1000挿入ステートメントの場合は40秒。 – DanialAbdi

関連する問題