1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java und SQL: Ausgabe klappt nicht

Dieses Thema im Forum "PHP & Co." wurde erstellt von powerlocke, 14.01.10.

  1. powerlocke

    powerlocke Kaiser Wilhelm

    Dabei seit:
    20.07.08
    Beiträge:
    173
    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:

    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
     
  2. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    Und wo genau scheitert es? Exception?

    Btw, was bezweckst du damit …:
    Code:
    while (rs.next() == true ){
    if (rs.next()!=true){break;}
         // ...
    }
    
     
  3. powerlocke

    powerlocke Kaiser Wilhelm

    Dabei seit:
    20.07.08
    Beiträge:
    173
    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.Ä.
     
  4. bezierkurve

    bezierkurve Danziger Kant

    Dabei seit:
    12.06.05
    Beiträge:
    3.861
    … 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;}
    ?
     
  5. powerlocke

    powerlocke Kaiser Wilhelm

    Dabei seit:
    20.07.08
    Beiträge:
    173
    warum denn zweimal? bzw wo?
     
  6. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    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. powerlocke

    powerlocke Kaiser Wilhelm

    Dabei seit:
    20.07.08
    Beiträge:
    173
    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!
     
  8. gKar

    gKar Maunzenapfel

    Dabei seit:
    25.06.08
    Beiträge:
    5.362
    Ü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.)
     
  9. knalli

    knalli Stechapfel

    Dabei seit:
    19.01.10
    Beiträge:
    159
    Das liegt daran, dass das Break auch unnötig ist. Dafür ist ja while(rs.next()) da. Konzept von einer Preloop nicht verstanden?:innocent:

    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. powerlocke

    powerlocke Kaiser Wilhelm

    Dabei seit:
    20.07.08
    Beiträge:
    173
    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-pdfs-erstellen-t287975.html

    danke!

    niky
     

Diese Seite empfehlen