MySQL ResultSet vollständig auslesen

Llois41

Mitglied
Hallo,

ich habe folgendes Problem: Ich möchte per Abfrage alle dazu passenden Datensätze auslesen und in ein Nutzer-Array ("Nutzer" ist ein eigener Datentyp mit verschiedenen Attributen, bspw. Name, Vorname, Geb.Dat etc.) speichern.

Nun bekomme ich aber leider alle Daten nur 3-fach ausgelesen, habe mir sogar einen Counter gesetzt, der auch das 3-fache an Ausgaben zählt, wie eigentlich nur möglich sind (Nutzer-Array ist auf 50 Einträge beschränkt).
Zudem wird immer nur ein Nutzer mehrmals ausgegeben, obwohl mehrere Nutzer auf meine Testabfrage passen müssten.

Anbei mein Code, vielleicht sieht ja jemand den Fehler:
Java:
public Suchanfrage suchen(Suchanfrage s){
        try{
         
            con.setReadOnly(true);
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM nutzer WHERE ichWillLernen LIKE UPPER('"+s.getParameterIchKann()+
                    "') AND ichSpreche LIKE UPPER('"+s.getParameterIchLerne()+"') ");
            int countResults = 0;
             
            while(rs.next())
            {
                   
                for(int i = 0;i < s.getSuchergebnisse().length; i++)
                {
                  
                    String datum = rs.getString(5);
                    String[] zahlenString = datum.split("\\.");
                    int tag=Integer.parseInt(zahlenString[0]);
                    int monat=Integer.parseInt(zahlenString[1]);
                    int jahr=Integer.parseInt(zahlenString[2]);
                 
                    Nutzer n = new Nutzer(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4),
                            new Datum(tag,monat,jahr),rs.getString(6), rs.getString(7),rs.getString(8),
                            rs.getString(9).split(","),rs.getString(10),null,null,null);
             
                    s.getSuchergebnisse()[i] = n;
                    countResults ++;
                    
                }
               
                    }
               
            rs.close();
            stmt.close();
            con.close();
            System.out.println(countResults);
            //System.out.println(s);
           
            for(int j = 0; j<s.getSuchergebnisse().length; j++)
            {
                System.out.println(s.getSuchergebnisse()[j]);
            }
           
            return s;
           
        }catch(Exception e){
            System.out.println("****Fehlermeldung**** ->"+e);
            return null;
        }
 
Zuletzt bearbeitet von einem Moderator:

Llois41

Mitglied
Der erste Teil soll alle Ergebnisse anzeigen, die die Anfrage erfüllen, die sind ja dann nach meinem Verständnis alle im ResultSet, und über die Schleife versuche ich diese auszulesen. Leider weiß ich nicht genau wie ich das hinbekomme.

Den zweiten Teil muss ich natürlich ändern, da erstelle ich jetzt erst ein Nutzer-Array, welches zum Schluss über die set-Methode in den Suchergebnissen gespeichert wird.
 

Llois41

Mitglied
Funktioniert leider auch nicht, er springt einfach nicht in die nächste Zeile des ResultSets, ich habe es schon mit rs.absolute(i+1) probiert, allerdings funktioniert das auch nicht, bin gerade leicht am verzweifeln, dabei ist es bestimmt nur eine Zeile die Fehlt :D

Aktuell sieht der Code nun so aus:

Java:
public Suchanfrage suchen(Suchanfrage s){
        try{
           
            con.setReadOnly(true);
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM nutzer WHERE ichWillLernen LIKE UPPER('"+s.getParameterIchKann()+
                    "') AND ichSpreche LIKE UPPER('"+s.getParameterIchLerne()+"') ");
            int countResults = 0;
            Nutzer [] results = new Nutzer [s.getSuchergebnisse().length];
            
            for(int i = 0; i < s.getSuchergebnisse().length && rs.next(); i++)
            {
                String datum = rs.getString(5);
                String[] zahlenString = datum.split("\\.");
                int tag=Integer.parseInt(zahlenString[0]);
                int monat=Integer.parseInt(zahlenString[1]);
                int jahr=Integer.parseInt(zahlenString[2]);
                   
                Nutzer n = new Nutzer(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4),
                        new Datum(tag,monat,jahr),rs.getString(6), rs.getString(7),rs.getString(8),
                        rs.getString(9).split(","),rs.getString(10),null,null,null);
           
                results[i] = n;
                countResults ++;
                
                    }
            s.setSuchergebnisse(results);    
            rs.close();
            stmt.close();
            con.close();
            System.out.println(countResults);
 

Llois41

Mitglied
ich würde es mal mit einer while Schleife
Java:
while(rs.next()){
    // do it...
}
versuchen

Ich habe es sowohl mit einer while-Schleife, als auch mit einer äquivalenten for-Schleife versucht, als Ausgabe bekomme ich weiterhin leider nur einen Datensatz n-mal angezeigt, wobei n für die Anzahl der Treffer steht.

Über rs.getRow() lasse ich mir bei jedem Durchlauf nun die Reihe anzeigen, und siehe da, er zählt die von 1 bis n auch hoch, lediglich die Daten aus den Reihen werden nicht geladen, ich erhalte immer nur einen Datensatz.
 

Llois41

Mitglied
schon mal kontolliert wie groß das array ist?

warum nimmst du keine List?

Das Array ist 50 Felder groß und die Schleife wird auch nur n-Mal durchlaufen, in den anderen Zeilen in der Ausgabe steht "null".

Ich würd mal mit einem sql viewer deine Tabelle ansehen, was da drinnen steht.


In den ersten n Ausgaben jedoch leider n-mal das gleiche, dabei sind auch n passende Datensätze drin, allerdings wird nur der neueste Eintrag ausgegeben.
 

Llois41

Mitglied
Ok ich lasse mir nun in jedem Schleifendurchlauf den Datensatz ausgeben, und diese sind alle richtig und auch unterschiedlich. Nachdem ich die von dem temporären Array (results[]) in das Array des Objekts gespeichert habe und mir das nach der Schleife ausgeben lasse, gibt er wieder nur den letzten Eintrag aus...
 

Llois41

Mitglied
Poste die Klasse Nutzer mal... ich hab da so einen Verdacht.
Java:
public class Nutzer
{
    //Variablendeklaration
    private static String vorname;
    private static String name;
    private static String bezirk;
    private static String geschlecht;
    private static Datum geburtsdatum;
    private static String ichSpreche;
    private static String ichWillLernen;
    private static String[] freizeitAktivitäten;
    private static String sonstigeInfos;
    protected static String mail;
    private static char[] passwort;
    private static Match [] alleMatches = new Match[10];
    private static Suchanfrage [] alleSuchanfragen = new Suchanfrage[10];
  
    //Konstruktor
    public Nutzer(String vorname, String name, String geschlecht, String bezirk, Datum geburtsdatum, String ichSpreche,
            String ichWillLernen, String sonstigeInfos, String[] freizeitAktivitäten, String mail, char[] passwort, Match[] alleMatches, Suchanfrage[] alleSuchanfragen)
    {
        Nutzer.vorname = vorname;
        Nutzer.name = name;
        Nutzer.geschlecht = geschlecht;
        Nutzer.geburtsdatum = geburtsdatum;
        Nutzer.bezirk = bezirk;
        Nutzer.ichSpreche = ichSpreche;
        Nutzer.ichWillLernen = ichWillLernen;
        Nutzer.freizeitAktivitäten = freizeitAktivitäten;
        Nutzer.sonstigeInfos = sonstigeInfos;
        Nutzer.mail = mail;
        Nutzer.passwort = passwort;
//        this.alleMatches = alleMatches;
//        this.alleSuchanfragen = alleSuchanfragen;
    }

    //Methoden
  
//    public void ErzeugeNutzer(Nutzer n){
//        addNutzer(n);
//    }

  
    public Nutzer(char[] passwort2, String mail2) {
        // TODO Automatisch generierter Konstruktorstub
    }

    @Override
    public String toString() {
        return "('"+ vorname + "','"+name+"','"+geschlecht+"','"+bezirk+"','"+geburtsdatum+
                "','"+ichSpreche+"','"+ichWillLernen+"','"+sonstigeInfos+"','"+Arrays.toString(freizeitAktivitäten)+"','"+mail+"','"+Arrays.toString(passwort)+"','"
                +alleMatches+"','"+alleSuchanfragen+"')";  
      
//        return "Nutzer [vorname=" + vorname + ", name=" + name + ", bezirk=" + bezirk + ", geschlecht=" + geschlecht
//                + ", geburtsdatum=" + geburtsdatum + ", ichSpreche=" + ichSpreche + ", ichWillLernen=" + ichWillLernen
//                + ", freizeitAktivitäten=" + Arrays.toString(freizeitAktivitäten) + ", sonstigeInfos=" + sonstigeInfos
//                + ", mail=" + mail + ", passwort=" + passwort + ", alleMatches=" + Arrays.toString(alleMatches)
//                + ", alleSuchanfragen=" + Arrays.toString(alleSuchanfragen) + "]";
    }

    public static String getVorname() {
        return vorname;
    }

    public static void setVorname(String vorname) {
        Nutzer.vorname = vorname;
    }

    public static String getName() {
        return name;
    }

    public static void setName(String name) {
        Nutzer.name = name;
    }

    public static String getBezirk() {
        return bezirk;
    }

    public static void setBezirk(String bezirk) {
        Nutzer.bezirk = bezirk;
    }

    public static String getGeschlecht() {
        return geschlecht;
    }

    public static void setGeschlecht(String geschlecht) {
        Nutzer.geschlecht = geschlecht;
    }

    public static Datum getGeburtsdatum() {
        return geburtsdatum;
    }

    public static void setGeburtsdatum(Datum geburtsdatum) {
        Nutzer.geburtsdatum = geburtsdatum;
    }

    public static String getIchSpreche() {
        return ichSpreche;
    }

    public static void setIchSpreche(String ichSpreche) {
        Nutzer.ichSpreche = ichSpreche;
    }

    public static String getIchWillLernen() {
        return ichWillLernen;
    }

    public static void setIchWillLernen(String ichWillLernen) {
        Nutzer.ichWillLernen = ichWillLernen;
    }

    public static String[] getFreizeitAktivitäten() {
        return freizeitAktivitäten;
    }

    public static void setFreizeitAktivitäten(String[] freizeitAktivitäten) {
        Nutzer.freizeitAktivitäten = freizeitAktivitäten;
    }

    public static String getSonstigeInfos() {
        return sonstigeInfos;
    }

    public static void setSonstigeInfos(String sonstigeInfos) {
        Nutzer.sonstigeInfos = sonstigeInfos;
    }

    public static String getMail() {
        return mail;
    }

    public static void setMail(String mail) {
        Nutzer.mail = mail;
    }
  
    public static char[] getPasswort() {
        return passwort;
    }

    public static void setPasswort(char[] passwort) {
        Nutzer.passwort = passwort;
    }

    public static Match[] getAlleMatches() {
        return alleMatches;
    }

    public static void setAlleMatches(Match[] alleMatches) {
        Nutzer.alleMatches = alleMatches;
    }

    public static Suchanfrage[] getAlleSuchanfragen() {
        return alleSuchanfragen;
    }

    public static void setAlleSuchanfragen(Suchanfrage[] alleSuchanfragen) {
        Nutzer.alleSuchanfragen = alleSuchanfragen;
    }

}
 

Flown

Administrator
Mitarbeiter
STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC STATIC

Google das doch mal!

PS: Poste doch Code in Code-Tags [code=java]//JAVA CODE HERE[/code]
 

Llois41

Mitglied
Öhm gute Frage, wir arbeiten zu 2. daran und ich glaube, das war für eine andere Methode wichtig, wüsste aber gerade nicht genau was...
Aber über
Java:
//System.out.println(results[i]);
bekomme ich in jedem Durchlauf das richtige ausgegeben, lediglich bei der Ausgabe am Ende
Java:
//
s.setSuchergebnisse(results);   
           
            System.out.println("Es wurden " + countResults + " passende Einträge gefunden!");
           
            for(int j = 0; j<s.getSuchergebnisse().length; j++)
            {
                System.out.println(s.getSuchergebnisse()[j]);
            }
bekomme ich nur den gleichen Datensatz angeziegt...
 

Llois41

Mitglied
Aber wieso bekomme ich dann über
Java:
System.out.println(results[i]);
die richtigen Objekte ausgegeben, ist dann der Fehler nicht beim Speichern des einen Arrays in das andere?
 

Llois41

Mitglied
Habe eine Lösung gefunden, Nutzer ist jetzt nicht mehr static, hat aber ein statisches Attribut, welches den aktuellen Nutzer anzeigt. Ist nicht die schönste Lösung, aber es funktioniert. :D
Danke für die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
A Warum ist mein ResultSet leer? Datenbankprogrammierung 5
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
RaoulDuke ResultSet - Wie arbeitet sowas intern Datenbankprogrammierung 2
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
T MAX und ResultSet#next Datenbankprogrammierung 10
R ResultSet zu bestimmtem DS navigieren Datenbankprogrammierung 4
S .leeres Resultset abfangen Datenbankprogrammierung 2
B ResultSet ohne Datenbank erstellen Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben