Ich möchte eine JTabel dynamisch mit Daten aus einer MySQL-Datenbank füllen.
Leider werden immer die selben Datensätze angezeigt und die erste Zeile wird nicht angezeigt, wenn ich alle Daten aus der Tabelle ausgeben lassen will.
(3 Datensätze befinden sich in der Datenbank, der letzte wird nur angezeigt)
Die Klasse ResultSet bietet ja die Methode rs.beforeFirst(), um den Zeiger vor den ersten Datensatz zu setzen.
Des Weiteren die Methode next(), um zum nächsten Datensatz zu springen.
Wo genau muss ich die beiden Methoden verwenden, damit es funktioniert?
Ich bekomme immer die Exception:
"java.sql.SQLException: After end of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4847)"
Leider werden immer die selben Datensätze angezeigt und die erste Zeile wird nicht angezeigt, wenn ich alle Daten aus der Tabelle ausgeben lassen will.
(3 Datensätze befinden sich in der Datenbank, der letzte wird nur angezeigt)
Die Klasse ResultSet bietet ja die Methode rs.beforeFirst(), um den Zeiger vor den ersten Datensatz zu setzen.
Des Weiteren die Methode next(), um zum nächsten Datensatz zu springen.
Wo genau muss ich die beiden Methoden verwenden, damit es funktioniert?
Ich bekomme immer die Exception:
"java.sql.SQLException: After end of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4847)"
Java:
private void btnFireSQLActionPerformed(java.awt.event.ActionEvent evt) {
try{
String sSQL = txtSQL.getText();
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection(
"jdbc:mysql://" + DBConnection.connections[0] + "/"
+ DBConnection.connections[3],
DBConnection.connections[1], DBConnection.connections[2]);
con.setReadOnly(true);
con.setAutoCommit(true);
Statement statement = con.createStatement();
if(sSQL.isEmpty()){
JOptionPane.showMessageDialog(rootPane, "Bitte SQL eingeben!");
}else{
ResultSet rs = statement.executeQuery(sSQL);
ResultSetMetaData rsmd = rs.getMetaData();
columnCount = rsmd.getColumnCount();
Vector v = new Vector();
Vector v3 = new Vector();
if(rs.last()){
rowCount = rs.getRow();
}
rs.beforeFirst();
for(int i = 1; i<=rowCount; i++){
Vector v2 = new Vector();
for(int iii = 1; iii<=columnCount; iii++){
v2.addElement(rs.getObject(iii));
rs.next();
}
v3.add(v2);
}
for(int i = 1; i<=columnCount; i++){
v.add(rsmd.getColumnLabel(i));
while(i == columnCount-1){
defaultTableModel.setColumnIdentifiers(v);
tblResults.setModel(defaultTableModel);
break;
}
}
defaultTableModel.setDataVector(v3, v);
JOptionPane.showMessageDialog(rootPane, rowCount+" Datensätze betroffen.");
}
}catch(Exception e){
e.printStackTrace();
}
}
Zuletzt bearbeitet: