In meiner Anwendung möchte ich Daten aus einer Datenbank (Tabelle ca 300 000 Datensätze) in einen JTable darstellen. Mit Datensätzen <=100 000 klappt dies auch. Bei mehreren Datensätzen im ResultSet bekomm ich die Out of Heap space Exception.
Wie kann ich es so programmieren, das er quasi in Intervallen die Daten einliest und nicht gleich alle aufeinmal ins RS speichert? Den Heap möchte ich nicht vergrößern, da das ja keine optimale Lösung ist. Es sollten auch ein paar Millionen an Datensätzen eingelesen werden können.
Hier mein Source
Wie kann ich es so programmieren, das er quasi in Intervallen die Daten einliest und nicht gleich alle aufeinmal ins RS speichert? Den Heap möchte ich nicht vergrößern, da das ja keine optimale Lösung ist. Es sollten auch ein paar Millionen an Datensätzen eingelesen werden können.
Hier mein Source
Java:
ResultSetMetaData rsmd = null;
int clmCnt = -1;
try {
rsmd = rs.getMetaData();
clmCnt = rsmd.getColumnCount();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this,e.getMessage(),"Fehler",JOptionPane.ERROR_MESSAGE);
}
if (rsmd == null || clmCnt == -1) {
throw new RuntimeException("rsmd is null");
}
try {
rs.beforeFirst();
rs.last();
int rowCnt = rs.getRow();
rs.beforeFirst();
Object[][] odata = new Object[rowCnt][clmCnt];
Object[] clmHeaders = new Object[clmCnt];
for (int i = 1; i <= clmCnt; i++) {
clmHeaders[i - 1] = rsmd.getColumnName(i);
}
int row = 0;
while (rs.next()) {
for (int i = 1; i <= clmCnt; i++) {
//System.out.print(rs.getString(i) + " ");
odata[row][i - 1] = rs.getString(i);
}
row++;
System.out.println();
}
dtm.setDataVector(odata, clmHeaders);
} catch (SQLException e1) {
JOptionPane.showMessageDialog(this,e1.getMessage(),"Fehler",JOptionPane.ERROR_MESSAGE);
}
Zuletzt bearbeitet von einem Moderator: