2016-04-29 37 views
2

我必須在mySQL中用Java添加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

你正在做百萬個查詢。你不能把所有東西都收集到一個巨大的查詢中,只做一個查詢嗎? – 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批次或100,000次更好嗎?爲什麼? – GOXR3PLUS

+0

@ GoXr3Plus這取決於太多的因素來回答簡單;但是(通常)大批量生產的收益遞減。 –

+0

你能提供一篇文章或特定的情況像原來的問題?感謝您的幫助。 – GOXR3PLUS