JTable gibt java.lang.OutOfMemoryError

silbsch

Grünschnabel
Hallo,
bin ein Java-Neuling und habe ne Frage zum Füllen einer JTable.
Ich bekomme aus einer Datenbank ein ResultSet zurück, welches ca 150.000 Datensätze enthält.
und das sprengt das TableModel.
Ich fülle meine JTable so:
Code:
String strSql = "SELECT * FROM tabelle";

// gibt gleich fertiges ResultSet zurück
ResultSet rs = myconn.executeQuery(strSql);

tblDataModel = new DefaultTableModel();
				
ResultSetMetaData rsmd = rs.getMetaData();
int clmCnt = rsmd.getColumnCount();
				
Vector clmHeader = new Vector();
//Vector dataVector = new Vector();
				
for(int i = 1; i <= clmCnt;i++) {
	clmHeader.addElement(rsmd.getColumnName(i));
}

tblDataModel.setColumnIdentifiers(clmHeader);
					
while(rs.next()){
	Vector rowVector = new Vector();
	for(int i = 1; i <= clmCnt; i++){
			rowVector.addElement(rs.getString(i));
	}
	tblDataModel.addRow(rowVector);
}
				
this.jTable1.setModel(tblDataModel);
this.jTable1.updateUI();

Wie kann ich das füllen der JTable optimieren. Jetzt kommt OutOfMemory beim Füllen von tblDataModel. Wenn ich "SELECT feld FROM tabelle" mache, geht es. Ich brauche aber alle felder der Datenbanktabelle.
Mit
Code:
java -ms90000000 -mx90000000 MyApplication
läuft es auch, aber gibt es nicht noch andere Möglichkeiten?
Danke für eure Hilfe
Sven
 
Hallo!

Denke kaum, dass du bei deinen 150.000 Datensätzen immer ALLE am Client anzeigen musst. Soviel kann kann Mensch auf einmal bearbeiten. Kannst du die Datensätze denn nicht "häppchenweise" Anzeigen?

Gruß Tom
 
Bei ungünstiger Kombination von Auswahlkriterien kann es zu so einer großen Menge kommen.
:(

Gibt es eine (einfache) Möglichkeit Datensätze nachzuladen, also z.B hat man als Ergebnismenge 10.000 Sätze. Es werden in der Tabelle 1000 Datensätze angezeigt. Wenn man jetzt zum 1001. Satz scrollt, werden erst die Sätze 1001 bis 2000 geladen?
Macht sowas Sinn ***grübl***?

2.Frage:
Kann man die mx/ms - Option auch bei der Erstellung eines Jar-file mitgeben, d.h. wenn man unter Windows auf's jar-file klickt es nicht zum Fehler kommt?
 
Mit dem Nachladen von Datensätzen macht das meiner Meinung nach schon sinn.
Habe das bisher immer über die Methode setFetchSize(int) gelöst (bei Oracle)
...
Resultset rs;
Statement select = connection.createStatement();
select.setFetchSize(1000);
rs = select.executeQuery(statement);
rs.next();
...
Bei mysql scheint das aber bei mir nicht zu funktionieren.
Trotz setFetchsize bekomme ich ein java.lang.OutOfMemoryError.
Da scheint der jdbc-Treiber gar nicht drauf zu reagieren!? Hat da jemand noch nne andere Idee?

mfg
sportingt
 
Zurück