Я написал метод insert()
, в котором я пытаюсь использовать пакет JDBC для вставки полмиллиона записей в базу данных 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
?
Спасибо