2016-04-29 35 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