1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

JDBC (Java) SET Variable

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Kekse, 2 Dezember 2015.

  1. Kekse

    Kekse Benutzer

    Hallo zusammen,

    ich habe zwei Statements in einem Query, der zweite ist abhängig davon, was im ersten eingefügt wird. Im speziellen: Nach dem ersten Query werden zwei Variablen gesetzt, die im nachfolgenden dann verwendet werden:
    Code:
    # Check whether we inserted something or not
    SET @created := (FOUND_ROWS() = 1);
    SET @tempVar := (SELECT MAX(id) FROM [...]);
    Das funktioniert alles so weit hervorragend, aber in meinem Java Code nicht mehr. Offenbar unterstützt der Connector von MySQL kein SET (und mit DECLARE wird mir ebenfalls ein Fehler geworfen).
    Gibt es irgendeine Möglichkeit, Variablen im JDBC zu verwenden? Das würde auch die nervige Angwohnheit, keine named Parameters zu unterstützen sehr viel angenehmer machen, da ich auch gerne etwas wie
    Code:
    SET @tempVar := ?;
    verwenden würde.

    Kennt sich hier jemand aus und kann mir dabei helfen?
    Noch mal, damit es keine Irritationen gibt: Es geht hier nicht um MySQL per se (die Queries funkionieren eigendlich), sondern um JDBC.

    Vielen Dank :)

    Viele Grüße
     
  2. Kekse

    Kekse Benutzer

    Hi noch mal,

    (ich habe keine mehr Funktion gefunden, um den Beitrag zu editieren, also noch mal ich...)
    mein erster Fehler war, das ich
    Code:
    &allowMultiQueries=true
    im Connector String vergessen hatte.
    Das ist aber leider noch nicht alles, ich habe mal ein kleines Beispiel gemacht:
    Code:
    try (PreparedStatement stmt = con.prepareStatement("SET @user_id:=?; SELECT * FROM player WHERE id=@user_id;")) {
      stmt.setInt(1, 4);
      try (ResultSet rs = stmt.executeQuery()) {
        rs.next();
        System.out.println("User: " + rs.getString("user_name"));
      }
    }
    Ich erhalte dabei
    Code:
    java.sql.SQLException: ResultSet is from UPDATE. No Data.
    Ich habe mir für meine Statements ein hässliches Workaround gebastelt (ich muss unter anderem einen Parameter mehrfach einfügen, etc.), aber vielleicht findet ja noch jemand eine Lösung? Wäre super!

    Viele Grüße
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Die Lösung wäre auf SQL-Ebene mit WITH-Statements zu arbeiten. Kann MySQL aber nicht.
     
  4. ukulele

    ukulele Datenbank-Guru

    Mir ist nicht ganz klar warum du auf SET angewiesen bist.
     
  5. Kekse

    Kekse Benutzer

    Hallo,

    sorry, dass ich mich erst so spät wieder melde.
    Ich bin nicht 100%ig auf SET angewiesen, aber es hätte einiges einfacher gemacht, da der Java Treiber auch keine named Parameters unterstützt. Wenn ich also in einem längeren Query mehrmals den gleichen Parameter verwenden will, muss ich diesen auch x-mal übergeben - bei verschiedenen alle in der richtigen Reihenfolge. Das macht den java Code hässlich.
    Zum zweiten hatte ich einen Query, welcher auf den Wert FOUND_ROWS() des vorherigen angewiesen war. Dies hat (wie oben im Code) mit dem SET funktioniert, wenn ich es aber in die WHERE clause des nacholgenden Queries einbaue, kommt es zu seltsamen Verhalten.
    Ich habe die beiden Queries jetzt in zwei Aufrufe unterteilt und die gewünschte Funktionalität, ich hatte nur darauf gehofft, dass ich die funktionierenden Queries nicht groß umbauen muss, aber das hat sich jetzt erledigt.
    Viele Grüße
     
Die Seite wird geladen...

Diese Seite empfehlen

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