मैं एक विधि insert()
लिखा है जो मैं एक MySQL डेटाबेस में पांच लाख रिकॉर्ड डालने के लिए JDBC बैच का उपयोग करने के कोशिश कर रहा हूँ में:JDBC बैच सम्मिलित OutOfMemoryError
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);
}
}
लेकिन जब भी मैं इस विधि चलाने का प्रयास, मैं निम्नलिखित त्रुटि मिलती है: यदि मैं ps.executeUpdate()
साथ ps.addBatch()
की जगह
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.executeBatch()
निकालने के लिए, यह ठीक काम करता है, हालांकि यह कुछ समय लगता है। अगर आपको पता है कि बैच का उपयोग इस स्थिति में उचित है, तो कृपया मुझे बताएं, और यदि ऐसा है, तो यह OurOfMemoryError
क्यों देता है?
धन्यवाद
और एन का मूल्य क्या होना चाहिए? – craftsman
मूल्य आपके ऊपर है, आपको स्मृति और प्रदर्शन के बीच व्यापार बंद करने के लिए सर्वोत्तम मूल्य प्राप्त करने के लिए अपने एप्लिकेशन को बेंचमार्क करना होगा। –