我编写了一个方法insert()
,尝试使用 JDBC Batch 将 50 万条记录插入 MySQL 数据库:
public void insert(int nameListId, String[] names) {
String sql = "INSERT INTO name_list_subscribers (name_list_id, name, date_added)" +
" VALUES (?, ?, NOW())";
Connection conn = null;
PreparedStatement ps = null;
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
for (String s : names ) {
ps.setInt(1, nameListId);
ps.setString(2, s);
ps.addBatch();
}
ps.executeBatch();
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
closeDbResources(ps, null, conn);
}
}
但是每当我尝试运行此方法时,都会出现以下错误:
java.lang.OutOfMemoryError: Java heap space
com.mysql.jdbc.ServerPreparedStatement$BatchedBindValues.<init>(ServerPreparedStatement.java:72)
com.mysql.jdbc.ServerPreparedStatement.addBatch(ServerPreparedStatement.java:330)
org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:171)
如果我替换ps.addBatch()
为ps.executeUpdate()
和删除ps.executeBatch()
,它工作正常,虽然需要一些时间。如果您知道在这种情况下使用 Batch 是否合适,请告诉我,如果合适,那么为什么会给出OurOfMemoryError
?
谢谢