Warum ist mein ResultSet leer?

Status
Nicht offen für weitere Antworten.

andkul

Bekanntes Mitglied
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!!!)
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
 
S

SlaterB

Gast
aus einem ResultSet kann man anscheinend nur einmal die Daten auslesen, danach ist es alle,

evtl. kann man es noch auf auf Anfang zurücksetzen,
aber

while(rs.next()) durchzulaufen in getRowCount()
und danach nochmal
while(rs.next()) in getData(),
das muss ja auf jedenfall schiefgehen,

durchlaufe die Daten nur EINMAL, fülle die String[] pro Eintrag in eine Liste dynamischer Größe und am Ende kannst du ein Array draus machen, falls gewünscht
 

andkul

Bekanntes Mitglied
ok, das leuchtet mir ein was du da sagst. Werd ich gleich mal ändern.
Vielen Dank für die prompte Antwort
 
S

SlaterB

Gast
> for(c = 0; c < this.getColCount(rs); c++)


hier wird übrigens in jedem Schleifendurchlauf getColCount() aufgerufen, das ist doch unnötig,
den Wert kannst du genausogut einmal vorher als int colCount ablegen und gut ist,

zum Glück muss in diesem Fall nicht jedes Mal eine neue Query ausgeführt werden,
mit solchen Konstrukten kann man viel Ärger machen
 

andkul

Bekanntes Mitglied
ok, also ich musste einfach den Cursor nach jeder Verwendung des ResultSets mit rs.beforeFirst() wieder auf den Anfang setzen, das ist alles.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
@SupressWarnings() HSQLDB Datenbank für mein Dorfbauspiel "Time of Kings" Datenbankprogrammierung 6
J SQLite Ich muss für mein Projekt meine Datenbank Kapseln Datenbankprogrammierung 2
E Warum kann mein SQL-File nicht in DB2 ausgeführt werden? Datenbankprogrammierung 1
M Wo ist mein Fehler ? o: Datenbankprogrammierung 4
K Ist mein UPDATE fehlerhaft? Datenbankprogrammierung 3
N Hilfe ! Mein Applet bekommt ein Access-Denied von MySQL Datenbankprogrammierung 7
C wie soll ich eine bean in mein programm integriegren? Datenbankprogrammierung 2
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
Z ResultSet ist null warum? Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
C PostgreSQL ResultSet.TYPE_SCROLL_SENSITIVE setzen Datenbankprogrammierung 2
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
L Zugriff auf ein Resultset Datenbankprogrammierung 7
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
D Resultset schließen ?? Datenbankprogrammierung 5
T Oracle Resultset to Array sehr langsam. Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
L ResultSet Datenbankprogrammierung 1
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
R MySQL Umgang mit ResultSet/Fremdschlüssel ausgeben Datenbankprogrammierung 2
D MySQL ResultSet als Stream weiter geben Datenbankprogrammierung 9
M ResultSet Cachen Datenbankprogrammierung 3
R ResultSet mit "Untertabellen" Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R Resultset.last() Problem Datenbankprogrammierung 12
PaulG Leeres ResultSet initialisieren Datenbankprogrammierung 6
J Frage zu ResultSet Datenbankprogrammierung 3
J SQL ResultSet Previous Datenbankprogrammierung 10
S MySQL ResultSet in ein Array übertragen Datenbankprogrammierung 7
H PostgreSQL Objekte aus ResultSet Datenbankprogrammierung 5
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
O Oracle Resultset greift auf Spaltenüberschriften zu Datenbankprogrammierung 2
Kenan89 Wieso klappt das ResultSet nicht? Datenbankprogrammierung 3
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
F Derby/JavaDB Resultset in JTablemodel Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
B SQLite ResultSet is TYPE_FORWARD_ONLY Datenbankprogrammierung 5
T Exception ResultSet Datenbankprogrammierung 7
0 ResultSet in JTable Datenbankprogrammierung 14
S [SQL] ResultSet Datenbankprogrammierung 4
R ResultSet Datenbankprogrammierung 4
I Sonderbehandlung wenn ResultSet leer ist Datenbankprogrammierung 9
I Problem mit ResultSet Datenbankprogrammierung 2
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
B ResultSet wirft komische NullPointerException. Datenbankprogrammierung 3
R Detached ResultSet Datenbankprogrammierung 3
F generelle Vorgehensweise ResultSet Datenbankprogrammierung 5
S ResultSet Datenbankprogrammierung 2
A MySQL ResultSet.updateBytes schlägt fehl Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
D ResultSet gibt nichts aus. Datenbankprogrammierung 3
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
ARadauer JDBC ResultSet schließen? Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
J jdbc ResultSet types Datenbankprogrammierung 5
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
F ResultSet to String[] Datenbankprogrammierung 3
E ResultSet in HashMap Datenbankprogrammierung 8
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
M Problem mit ResultSet bei SQL Server 2005 Datenbankprogrammierung 6
S ResultSet in ArrayList ablegen Datenbankprogrammierung 17
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
T ResultSet initialisieren Datenbankprogrammierung 2
C kein Resultset Datenbankprogrammierung 2
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
T ResultSet-Inhalt in Arrays schreiben Datenbankprogrammierung 3
S ResultSet variabel auslesen Datenbankprogrammierung 4
D Anzahl der Elemente im ResultSet ermitteln Datenbankprogrammierung 8
A Leeres ResultSet mit H2 unter Vista Datenbankprogrammierung 3
S ResultSet closed Datenbankprogrammierung 2
Z ResultSet mit einer anderen Datenquelle Datenbankprogrammierung 7
O Spaltenname aus Resultset Datenbankprogrammierung 2
thE_29 ResultSet und doppelte Spalten Datenbankprogrammierung 4
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
E ResultSet vergisst Reihe? Datenbankprogrammierung 2
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
F ResultSet refresh moeglich? Datenbankprogrammierung 3
S ResultSet enthält keine Daten Datenbankprogrammierung 2
B Geschlossenes ResultSet Datenbankprogrammierung 6
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
T ResultSet schließen? Datenbankprogrammierung 6
S Tabelle updaten wenn ResultSet aus JDBC-Quelle Datenbankprogrammierung 2
S ResultSet Datenbankprogrammierung 6
F Filtern innerhalb eines Resultset Datenbankprogrammierung 12
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
@ Like-Klausel; NPE bzw. leeres ResultSet Datenbankprogrammierung 4
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
B No ResultSet was produced Datenbankprogrammierung 2
S ResultSet erweitern ? Datenbankprogrammierung 4
E JDBC, ForwardOnly bei ResultSet nach Uebergabe Datenbankprogrammierung 4
R ResultSet liefert oracle.sql.TIMESTAMP, aber unbrauchbar Datenbankprogrammierung 9
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13

Ähnliche Java Themen

Neue Themen


Oben