Hallo,
ich glaub ich steh grad auf der Leitung.
Ich versuche grad mit der Methode getData() ein 2dimensionales Array aufzubauen, um
es dann meinem TableModel mitzugeben. Dazu rufe ich die Methode doQuery(sql) auf, die
einen query erhält, diesen an die Datenbank sendet und den ResultSet an
getData() zurückgibt. In der Methode getData() ist mein ResultSet aber leer, obwohl der
ResultSet in der Methode doQuery() alle Daten enthält.
Was mach ich falsch? Bitte helft mit auf die Sprünge!!
besonders merkwürdig finde ich, dass die Methode getColNames() einwandfrei funktioniert und da mach ich
ja nix anderes.
Hier die Klasse UserModel (hier ist ResultSet in der Methode getData() leer aber in getColNames() nicht!!!)
und hier die Klasse DatabaseAccess (hier enthält ResultSet alle Daten die es enthalten soll)
Vielen Dank schonmal, ich bin sicher Ihr findet den Fehler
ich glaub ich steh grad auf der Leitung.
Ich versuche grad mit der Methode getData() ein 2dimensionales Array aufzubauen, um
es dann meinem TableModel mitzugeben. Dazu rufe ich die Methode doQuery(sql) auf, die
einen query erhält, diesen an die Datenbank sendet und den ResultSet an
getData() zurückgibt. In der Methode getData() ist mein ResultSet aber leer, obwohl der
ResultSet in der Methode doQuery() alle Daten enthält.
Was mach ich falsch? Bitte helft mit auf die Sprünge!!
besonders merkwürdig finde ich, dass die Methode getColNames() einwandfrei funktioniert und da mach ich
ja nix anderes.
Hier die Klasse UserModel (hier ist ResultSet in der Methode getData() leer aber in getColNames() nicht!!!)
Code:
public class UserModel extends DefaultTableModel{
private String tableName = "tabellenname";
private DatabaseAccess dao = null;
public UserModel(){
dao = new DatabaseAccess(tableName);
this.setDataVector(this.getData(), this.getColNames());
}
public String[][] getData(){
String sql = "select * from " + tableName;
ResultSet rs = dao.doQuery(sql);
String[][] data = new String[this.getRowCount(rs)][this.getColCount(rs)];
try {
int r = 0;
int c = 0;
while(rs.next()) //rs.next() gibt false zurück
{
for(c = 0; c < this.getColCount(rs); c++)
{
data[r][c] = rs.getString(c+1);
}
r++;
}
} catch (Exception e) {
System.err.println("could not execute getData() algorithm");
e.printStackTrace();
}
return data;
}
public String[] getColNames(){
String sql = "describe " + tableName;
ResultSet rs = dao.doQuery(sql);
String[] colNames = new String[this.getColCount(rs)];
try {
System.out.println("getColNames() rs.next(): " + rs.next());
int i = 0;
while(rs.next()) //rs.next() gibt truezurück
{
colNames[i] = rs.getString(1);
i++;
}
} catch (Exception e) {
System.err.println("could not execute getColNames() algorithm");
e.printStackTrace();
}
return null;
}
public int getColCount(ResultSet rs){
int colCount = 0;
try {
ResultSetMetaData metaData = rs.getMetaData();
colCount = metaData.getColumnCount();
} catch (SQLException e) {
System.err.println("could not initialize metaData!!");
e.printStackTrace();
}
return colCount;
}
public int getRowCount(ResultSet rs){
int rowCount = 0;
try {
while(rs.next()) rowCount++;
} catch (SQLException e) {
System.err.println("could not execute rs.next()!!");
e.printStackTrace();
}
return rowCount;
}
......
}
und hier die Klasse DatabaseAccess (hier enthält ResultSet alle Daten die es enthalten soll)
Code:
public final class DatabaseAccess {
private Connection con = null;
private Statement stmt = null;
private String driverName = "Treiber";
private String serverName = "host";
private String dbName = "datenbankname";
private String user = "user";
private String pwd = "pwd";
private String tableName;
....
public ResultSet doQuery(String query){
System.out.println("query: " + query);
ResultSet rs = null;
try {
stmt = con.createStatement();
rs = stmt.executeQuery(query); //rs.next() gibt truezurück
} catch (SQLException e) {
e.printStackTrace();
System.err.println("could not execute following query " + query);
}
return rs;
}
....
}
Vielen Dank schonmal, ich bin sicher Ihr findet den Fehler