Ergebnis 1 bis 10 von 10
  1. #1
    Morgenduft
    Themenstarter

    Registriert
    07.2008
    Beiträge
    169

    Java und SQL: Ausgabe klappt nicht

    Hallo liebe Leute!

    Ich will in meinem Java-Applet eine Abfrage an eine Datenbank machen. Das Ergebnis oder die Ergebnisse sollen dann nacheinander ausgegeben werden.

    Der relevante Quelltext schaut so aus:

    rs = stmt.executeQuery("SELECT * FROM geb WHERE geb.id = 1781965");
    while (rs.next() == true ){
    if (rs.next()!=true){break;}
    System.out.println(rs.getString(1));
    System.out.println(rs.getString(2));
    System.out.println(rs.getString(3));
    System.out.println(rs.getString(4));
    }
    Gebe ich die Query direkt in phpmyadmin ein läuft alles einwandfrei, nur hier im Java-Applet gehts nicht.

    Ich benutze genau die gleichen Quellcode-Zeilen in einem anderen Programm (nur die Abfrage ist da etwas anders) und da gehts.

    Ich arbeite mit der java.sql-Klasse, habe überall neuste Versionen usw... woran könnte es noch liegen?

    Liebe Grüße

    Niky
    Wenn ich jemals herausfinde was Kunst ist behalte ich es für mich! (Pablo Picasso)

  2. #2
    Baldwins roter Pepping Avatar von bezierkurve
    Registriert
    06.2005
    Beiträge
    3.203
    Und wo genau scheitert es? Exception?

    Btw, was bezweckst du damit …:
    Code:
    while (rs.next() == true ){
    if (rs.next()!=true){break;}
         // ...
    }
    „Aber für was ist das gut?“
    — Ingenieur von Advanced Computing Systems Division of IBM zur Erfindung des Mikrochips, 1968

  3. #3
    Morgenduft
    Themenstarter

    Registriert
    07.2008
    Beiträge
    169
    Ah, hätt ich vielleicht schreiben sollen: es scheitert letzten Endes daran, dass er nichts ausgibt, sprich: das Programm läuft normal durch, sollte aber eigentlich zwischendurch die ersten vier Ergebnisse des ResultStatement (rs) ausgeben....

    Durch die while mit Abbruchbedingung, dass es einfach keinen weiteren Ergebniswert für rs.next() gibt, entsteht erst die Abfrage nach Antworten der Datenbank.

    _edit: Er gibt keine Fehler aus, keine Exception o.Ä.
    Wenn ich jemals herausfinde was Kunst ist behalte ich es für mich! (Pablo Picasso)

  4. #4
    Baldwins roter Pepping Avatar von bezierkurve
    Registriert
    06.2005
    Beiträge
    3.203
    Zitat Zitat von powerlocke Beitrag anzeigen
    Durch die while mit Abbruchbedingung, dass es einfach keinen weiteren Ergebniswert für rs.next() gibt, entsteht erst die Abfrage nach Antworten der Datenbank.
    … du „blätterst“ in deinem Code ja aber immer zwei mal weiter. Ist das tatsächlich gewollt? Wozu genau das
    Code:
    if (rs.next()!=true){break;}
    ?
    „Aber für was ist das gut?“
    — Ingenieur von Advanced Computing Systems Division of IBM zur Erfindung des Mikrochips, 1968

  5. #5
    Morgenduft
    Themenstarter

    Registriert
    07.2008
    Beiträge
    169
    warum denn zweimal? bzw wo?
    Wenn ich jemals herausfinde was Kunst ist behalte ich es für mich! (Pablo Picasso)

  6. #6
    Jerseymac Avatar von creative7even
    Registriert
    02.2005
    Alter
    30
    Beiträge
    454
    Code:
    while (rs.next() == true ) {   // 1. mal
      if (rs.next()!=true){break;} // 2. mal
    Wie bezierkurve schon sagte - du setzt den Cursor 2x weiter - einmal in der while-Bedingung, das 2te mal im Schleifenkörper.
    Dabei reicht die 1. Bedingung in der Schleife (while (rs.next() == true )). Der Grund warum du also kein Ergebnis bekommst könnte daran liegen, dass du mit der Query 1 oder 2 Datensätze filterst - den Cursor aber beim erreichen der Schleife schon wieder weiter schiebst... deshalb wird auch nichts ausgegeben.

  7. #7
    Morgenduft
    Themenstarter

    Registriert
    07.2008
    Beiträge
    169
    oh man und ich such und such... das brauchte ich bei dem Programm aus dem ich das kopiert habe und habs vergessen zu löschen... ich danke euch!
    Wenn ich jemals herausfinde was Kunst ist behalte ich es für mich! (Pablo Picasso)

  8. #8
    Altländer Pfannkuchenapfel Avatar von gKar
    Registriert
    06.2008
    Ort
    Wetter (Ruhr)
    Beiträge
    4.456
    Übrigens mal am Rande:
    1.) Ein Boolean muss man doch mit auf "==true" vergleichen. Denn der Ausdruck xyz==true wird genau dann true, wenn xyz den Wert true hat. Also ist "xyz==true" äquivalent zu einfach "xyz". Und statt "xyz!=true" oder "xyz==false" schreibt man am besten einfach "!xyz".

    2.) Wenn ich ein Break in einer Schleife sehe, bekomme ich das kalte Grausen. Ich kann nur allen Programmieranfängern raten, vernünftig strukturiert zu programmieren und nicht mit Sprungbefehlen (Relikten einer Urzeit der Programmierung) zu hantieren. (Lediglich das bescheuert realisierte C-Switch-Konstrukt erfordert den Einsatz von break.)
    * Wer nichts weiß, muss alles glauben.
    * Geduld mit der Streitsucht der Einfältigen! Es ist nicht leicht zu begreifen, dass man nicht begreift.
    Marie von Ebner-Eschenbach

    Mac-Tastaturlayout für Windows (z.B. in Bootcamp oder VM)

  9. #9
    Cripps Pink
    Registriert
    01.2010
    Beiträge
    153
    Das liegt daran, dass das Break auch unnötig ist. Dafür ist ja while(rs.next()) da. Konzept von einer Preloop nicht verstanden?

    Ich empfehle übrigens außerordentlich (vor allem ein Applet, Achtung Speicher) eine Verwendung von guten Fehlerbehandlungen (im Kontext von JDBC auch typischer Boilercode, weil er leider umfangreich ist). Außerdem muss man ja eh die Ressourcen wieder vernünftigt schließen (Stichwort finally).

    Ein Konstrukt, welches einerseits übersichtlich, gleichzeitig aber alles abdeckt, könnte sein:
    Code:
    private Collection<Long> getIdsByName(Connection connection, String name) {
      PreparedStatement pstm = null;
      ResultSet rs = null;
      try {
        pstm = connection.prepareStatement("SELECT id from table where name = ?");
        pstm.setString(1, name);
        rs = pstm.executeQuery();
    
        List<Long> result = new ArrayList<Long>();
        while (rs.next()) {
          // do what ever you want with rs.get*()
          result.add(rs.getLong(1));
        }
    
      } catch (SQLException e) {
        handleSQLException(e); // Methode, die die exception annimmt und verarbeitet, etwa ausloggen, ...
      } catch (Exception e) {
        // wahlweise auch Throwable, kommt auf den Kontext an
        handleException(e); // handles alles andere ab - kann natürlich auch ganz weggelassen werden
      } finally {
        closeResultSet(rs);
        closeStatement(pstm);
      }
      return Collections.emptyList();
    }
    
    private void closeResultSet(ResultSet rs) {
      try {
        if (rs != null) { rs.close(); }
      catch (Exception ignored) {}
    }
    
    // analog für Statement

  10. #10
    Morgenduft
    Themenstarter

    Registriert
    07.2008
    Beiträge
    169
    okay, danke für die vielen tipps, das mit dem boolean wusste ich noch nicht

    @knalli: ich habe bereits ein ähnliches konstrukt, wie von dir vorgeschlagen, eingebastelt, aber trotzdem danke!

    hab mittlerweile auch alles so wie ichs haben wollte, daher kann dieses thema auch geschlossen werden!

    falls mir noch jemand helfen möchte: ich habe einen anderen beitrag bei dem ich noch tipps zu pdf und email brauche

    http://www.apfeltalk.de/forum/java-p...n-t287975.html

    danke!

    niky
    Wenn ich jemals herausfinde was Kunst ist behalte ich es für mich! (Pablo Picasso)

Ähnliche Themen

  1. Standard Ton-Ausgabe wird nicht gespeichert
    Von Private_PAULA im Forum OS X
    Antworten: 0
    Letzter Beitrag: 22.10.2009, 20:47
  2. MBP 1080p Ausgabe nicht möglich.
    Von KILIK im Forum Mobil-Macs
    Antworten: 0
    Letzter Beitrag: 15.07.2009, 23:42
  3. Problem mit der Ausgabe einer for i in $(find) ausgabe
    Von Nachtmensch im Forum Unix & Terminal
    Antworten: 3
    Letzter Beitrag: 21.07.2008, 14:25
  4. Java - Ausgabe eines Baumes?
    Von Tengu im Forum Mac OS X Developer
    Antworten: 7
    Letzter Beitrag: 26.05.2007, 22:15
  5. Ausgabe auch bei nicht zutreffender WHERE Bedingung
    Von fablei im Forum Web-Programmierung
    Antworten: 6
    Letzter Beitrag: 14.11.2006, 14:04

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •