JDBC (Java) SET Variable

Kekse

Benutzer
Beiträge
6
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
 
Werbung:
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
 
Werbung:
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
 
Zurück
Oben