Ergebnis 1 bis 8 von 8

Thema: jdbc - PreparedStatement mit "select..where abc =/is null"

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ich verstehe nicht genau was dein Problem ist, bei Oracle gibts auch den "IS NULL" Operator.
    Ich habe zwar vom Praktikum noch in Erinnerung, dass es eine bessere Variante gibt, aber folgendes sollte eigentlich klappen:
    Code (SQL):
     
    SELECT *
    FROM TABLE_NAME
    WHERE
    (abc = "ljkdfl" OR abc IS NULL) AND
    (def = "ccasf" OR def IS NULL)
     

  2. #2
    @Irian
    PreparedStatements sind bei der Lösung schonmal ausgeschlossen weil ich dann gleich 2^(Anzahl der Attribute) davon bräuchte um alle Fälle abdecken zu können. Momentan bastel ich mir eh mit ifs ein normales Statement zusammen aber das ist auch ne plagerei und ich will ja aus performancegründen PreparedStatements verwenden.

    @Drakes
    Mein Problem ist, dass ich mit einem jdbc PreparedStatement eine select abfrage durchführen will, bei der die attribute auch null sein können.
    Angenommen ich will jetzt alle object bei denen abc den Wert "apfel" hat und def den Wert null, dann funktioniert folgender Code nicht mit MySQL weil im select ein = statt ein is steht:
    Code:
    // Ist jetzt mal aus den Händen gesaugter Code, keine Ahnung ob der kompilliert.
    PreparedStatetement stmtSelect = conn.prepareStatement("select * from object where abc = ? and def = ?");
    stmtSelect.setString(1, "apfel");
    stmtSelect.setNull(2, Types.VARCHAR);
    ResultSet resSelect = stmtSelect.executeQuery();
    Laut Arbeitskollege funktionierts für Oracle, habs aber nicht selber getestet. Bei deinem Vorschlag würde ich wohl mehr bekommen als mir lieb ist. Ich will ja nicht immer alle Datensätze wo die Attribute null sind, sondern nur wenn ich in meinem Java Programm das attribut im select tatsächlich auf null setze.

Berechtigungen

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