I am trying to read a file containing 158000 records(12MB) separted by newline and put that record in the mysql database but after inserting around 49000 records my java program throws following exception
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.jar.Manifest$FastInputStream.<init>(Manifest.java:315)
at java.util.jar.Manifest$FastInputStream.<init>(Manifest.java:310)
at java.util.jar.Manifest.read(Manifest.java:178)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at java.util.jar.JarFile.getManifestFromReference(JarFile.java:167)
at java.util.jar.JarFile.getManifest(JarFile.java:148)
at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:696) at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:696)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:228)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:430) at com.mysql.jdbc.Util.handleNewInstance(Util.java:430)
at com.mysql.jdbc.PreparedStatement.getInstance(PreparedStatement.java:553)
at com.mysql.jdbc.ConnectionImpl.clientPrepareStatement(ConnectionImpl.java:1378)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4143)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4042)
at loadcsvdatabase.LoadCsvDatabase.fnLoadCsvIntoMemory(LoadCsvDatabase.java:52)
at loadcsvdatabase.LoadCsvDatabase.main(LoadCsvDatabase.java:29)
Java Code of inserting the data
FileInputStream file;
DataInputStream dataIn;
BufferedReader bReader;
Connection conn= openConnection();
String strRecord=new String();
String[]strSplittedRecord;
file= new FileInputStream("D:\\Java\\CountryWhois.txt");
dataIn= new DataInputStream(file);
bReader= new BufferedReader(new InputStreamReader(dataIn));
PreparedStatement insertStmt;
String strQuery="insert into countrywhois values(?,?,?,?,?,?)";
while((strRecord=bReader.readLine())!=null)
{
strSplittedRecord=strRecord.split(",");
try {
insertStmt=conn.prepareStatement(strQuery);
insertStmt.setString(1,strSplittedRecord[0].substring(1, strSplittedRecord[0].length()-1));
insertStmt.setString(2,strSplittedRecord[1].substring(1, strSplittedRecord[1].length()-1));
insertStmt.setString(3,strSplittedRecord[2].substring(1, strSplittedRecord[2].length()-1));
insertStmt.setString(4,strSplittedRecord[3].substring(1, strSplittedRecord[3].length()-1));
insertStmt.setString(5,strSplittedRecord[4].substring(1, strSplittedRecord[4].length()-1));
insertStmt.setString(6,strSplittedRecord[5].substring(1, strSplittedRecord[5].length()-1));
int nResultInsert=insertStmt.executeUpdate();
if(nResultInsert!=0)
{
System.out.println("Inserted 1");
}
else
{
if(conn!=null)
{
conn.close();
System.out.println("Disconnected from database");
}
}
}
catch (Exception e)
{
conn.close();
e.printStackTrace(System.out);
}
}
it Throws Exception at Line insertStmt=conn.prepareStatement(strQuery);
Please suggest me why my program is running out of memory exception..