2016-04-29 11 views
2

JavaでmySQLに1.000.000行を追加する必要がありますが、プロセスはかなり長くなります。私はこのコードを持っています:Java SQL 100万行

for(int number=45000000;number<46000000;number++){ 

query="insert into free(number) values ("+"'"+number+"');"; 
try { 
    stmt.executeUpdate(query); 
    System.out.println(number +" added"); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 

どのようにプロセスを加速するには? (40分= 100.000行)何かアイデア?

+0

あなたはトランザクションに更新を入れてみることができます。また、生の文字列ではなく、準備された文を使うべきでしょう。それ以外の場合は、SQLインジェクションに自分自身を開きます。 (さらに速くなるかもしれません) –

+1

あなたは百万回の質問をしています。巨大なクエリにすべてを集めて1つのクエリを実行することはできませんか? – Gendarme

+0

すべての可能なオプションを試してみます –

答えて

2

PreparedStatementとバッチ処理を使用できます。何かのように、

String query = "insert into free(number) values (?)"; 
PreparedStatement ps = null; 
try { 
    ps = conn.prepareStatement(query); 
    for (int number = 45000000; number < 46000000; number++) { 
     ps.setInt(1, number); 
     ps.addBatch(); 
     if ((number + 1) % 100 == 0) { // <-- this will add 100 rows at a time. 
      ps.executeBatch(); 
     } 
    } 
    ps.executeBatch(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} finally { 
    if (ps != null) { 
     try { 
      ps.close(); 
     } catch (SQLException e) { 
     } 
    } 
} 
+0

1.000バッチまたは1時間あたり100.000を実行する方が良いでしょうか? – GOXR3PLUS

+0

@ GoXr3Plusこれは、単純に答えすぎる要素に依存します。大きなバッチサイズには(一般的に)リターンが減少しています。 –

+0

元の質問のような状況に特有の記事や何かを提供できますか?ありがとうございます。 – GOXR3PLUS

関連する問題