java.sql.Statement generates java.lang.OutOfMemoryError in big tabe - Mailing list pgsql-jdbc
From | Hartmann, Christian (externer Mitarbeiter)" |
---|---|
Subject | java.sql.Statement generates java.lang.OutOfMemoryError in big tabe |
Date | |
Msg-id | 52B98DCE50D0FE4E92206EC360D324EF34FF83@SWI4201.schufa.net Whole thread Raw |
Responses |
Re: java.sql.Statement generates java.lang.OutOfMemoryError
in big tabe
|
List | pgsql-jdbc |
Hello all
I have a funny problem.
I have a database with two lage tables 1'900'000 and 2'800'000 records.
No I would like to open a simple courser like
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class GenerateNamenSkalierung {
/**
* @param args
* void
*/
public static void main(String[] args) {
String serverName = "servername";
String databaseName = "namenskompass20090119";
String userid = "ms_namenskompass";
String password = "";
String generalTableNamePart = "nachname";
// jdbc:db2://automatix02:52810/INSchufa
String conString = "jdbc:postgresql://" + serverName + ":5432/" + databaseName;
//userid = "ms_namenskarte";
//password = null;
String jdbcDriverName = "org.postgresql.Driver";
// SELECT id, identifier, anzahl, median FROM public.vorname
final String sqlString1 = "SELECT id, identifier, anzahl, median FROM public." + generalTableNamePart;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try{
Class.forName(jdbcDriverName);
con = DriverManager.getConnection(conString, userid, password);
stmt = con.createStatement();
rs = stmt.executeQuery(sqlString1);
while (rs.next()) {
//System.out.println("The Java way, res is: " + rs.getObject(1) );
}
}catch(SQLException e){
//errorHelp(databaseName, userid, password, "");
e.printStackTrace();
}catch(ClassNotFoundException e){
//errorHelp(databaseName, userid, password, "");
e.printStackTrace();
}finally{
try{rs.close();}catch(Exception e){}
try{stmt.close();}catch(Exception e){}
try{con.close();}catch(Exception e){}
}
}
}
To iterate over all records and do some other sings.
But this simple class generates the following error.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
at java.lang.Class.getDeclaredField(Class.java:1880)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:181)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:65)
at java.sql.SQLException.<clinit>(SQLException.java:353)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1325)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:336)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:235)
at GenerateNamenSkalierung.main(GenerateNamenSkalierung.java:46)
Could this be a error in the JDBC dirver implementation?
Thanks for our help.
Greetings Chris
pgsql-jdbc by date: