ResultSet.getMetaData().getColumnCount() und allgemeine Verwirrung

jeipack

Erfahrenes Mitglied
Hi
Ich brauche schon bevor ich den ersten Datensatz aus einem ResultSet hole die Anzahl aller Datensätze. Dies wollte ich via MetaData machen:
Java:
System.out.println(rs.getMetaData().getColumnCount());
Das gibt mir aber IMMER 9 aus, egal wie viele Datensätze eigentlich drin sind.

So habe ich dann noch folgendes gemacht:
Java:
while(rs.next()) {
    counter++;
}

rs.first();
Und obwohl der ResultSet Type auf FORWARD_ONLY gestellt ist funktioniert es doch. Was ja eigentlich nicht sein darf. Nach Doku müsste dies eine SQLException werfen..

PS: Benutze diesen ResultSet: java.sql.ResultSet
Das ganze wurde in JBuilder2006 geschrieben und gedebuggt.

PPS: Und als ob das alles noch nicht genug ist, wenn ich dann in der Schleife in der ich die Daten aus dem ResultSet hole debugge und dort innerhalb der Schleife einen Breakpoint setze führt er den Schleifenkopf nicht aus, bleibt also immer beim gleichen Datensatz:
Java:
 while(rs.next()) {
//hier ist der breakpoint
}
--> danach habe ich einfach 100mal die Daten des ersten Datensatzes ausgelesen...

Was mache ich nur falsch? *verzweifelt*
 
Warum verwendest du in deiner SELECT Abfrage nicht COUNT.
Dann bekommst du doch die Anzahl.

auf deine Weise:
Java:
int iter=0;
 
for(int i=1;i<meta.getColumnCount()+1;i++){
                while(rs.next()){                    
                    //System.out.print(rs.getString(i)+",");
                }
                //System.out.print("\n");
                iter+=1;
            }
 
Zuletzt bearbeitet von einem Moderator:
hi dontschew
Ja an count habe ich auch schon gedacht, aber wie genau stell ich das an?

sowas wie:
SQL:
select count(tbl.*), tbl.ID from tbl
funktioniert ja nicht (kein Group) und
sowas:
SQL:
select count(tbl.*), tbl.ID from tbl group by tbl.ID
gibt bei count immer 1. Und ihrgendwie anderst groupieren kann ich nicht, da es dann nicht mehr die richtigen Daten liefern würde. Ich könnte natürlich einen zusätzlichen Select ausführen, aber bezüglich performance will ich auf weitere Zugriffe auf die DB verzichten.

Und dein Code bringt nicht wirklich den gewündschten Effekt..
Ich brauche die Anzahl der Datensätzer bevor ich überhaupt den ersten auslese.

Da mir vorhin beim Debuggen auch noch die VM abgeschmiert ist, habe ich langsam das Gefühl dass ihrgendwas Grundlegendes nicht stimmt..

Code:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77bfa573, pid=800, tid=3232
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_03-b07 mixed mode)
# Problematic frame:
# C  [MSVCRT.dll+0x1a573]
#
# An error report file with more information is saved as hs_err_pid800.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
 
Moin!
java Code:
  1. System.out.println(rs.getMetaData().getColumnCount());

Das gibt mir aber IMMER 9 aus, egal wie viele Datensätze eigentlich drin sind.
getColumnCount() gibt ja auch die Anzahl der Spalten wieder, und nicht die Anzahl der Zeilen bzw. Einträge in deinem ResultSet.

Nutze doch ein Scrollable Resultset und mach es einfach so:
Code:
resultset.last();
int rows = resultset.getRow();
resultset.beforeFirst();

*grüssle*
MeinerEiner
 
Hey MeinerEiner
Ach vielen Dank, Column heisst natürlich Spalte 0_o

Deine Lösung funktioniert. Woher das andere Fehlverhalten kam weiss ich nicht. Nachdem ich den Rechner neu gestartet habe und 10min lang einen Memtester laufen lies konnte ich wieder normal Debuggen. Mhh aber heute will ich das auch gar nicht mehr wissen ^^

Auf jedenfall vielen Dank

Gruss
jeipack
 
Ach da hab ich bei meinem Beispiel wohl die Schleifen vertauscht.

Sorry für den falsch Code: man hat aber auch viel zu viel um die Ohren da kann man sich garnicht konzentrieren
 

Neue Beiträge

Zurück