所以我尝试将HashMap中的所有键输入到数据库中。我的第一种方法是将所有密钥逐个插入我的数据库。请注意,HashMap的大小是几百万个密钥,因此这个过程需要花费很多时间。
我做了一些研究,偶然发现了 preparedStatement 界面。所以我想出了这段代码来创建10000个元素的批处理,然后将它们全部输入到数据库中。
final int batchSize = 10000;
int count = 0;
Connection dbConnection = null;
try {
dbConnection = getDBConnection();
String SQL = "INSERT INTO masterdict (window) " +
"VALUES(?)";
PreparedStatement ps = (PreparedStatement) dbConnection.prepareStatement(SQL);
for (String k : masterDict.keySet()) {
ps.setString(1,k);
ps.addBatch();
if(++count % batchSize == 0) {
System.out.println(count);
ps.executeBatch();
}
}
ps.executeBatch();
ps.close();
dbConnection.close();
由于某种原因,尽管这种方法与第一种方法完全相同。任何人都可以向我解释为什么会这样?
答案 0 :(得分:0)
阅读完评论后,我最终得到了这个新版本的代码,效果很好。
final int batchSize = 10000;
int count = 0;
Connection dbConnection = null;
try {
dbConnection = getDBConnection();
String SQL = "INSERT INTO masterdict (window) " +
"VALUES(?)";
PreparedStatement ps = (PreparedStatement) dbConnection.prepareStatement(SQL);
dbConnection.setAutoCommit(false);
for (String k : masterDict.keySet()) {
ps.setString(1,k);
ps.addBatch();
if(++count % batchSize == 0) {
System.out.println(count);
ps.executeBatch();
dbConnection.commit();
}
}
ps.executeBatch();
dbConnection.commit();
ps.close();
} catch (SQLException e) {
if (dbConnection != null) {
dbConnection.rollback();
}
System.out.println(e.getMessage());
} finally {
dbConnection.close();
}