web-dev-qa-db-de.com

Verwenden des Platzhalters "like" in der vorbereiteten Anweisung

Ich verwende vorbereitete Anweisungen, um MySQL-Datenbankabfragen auszuführen. Und ich möchte eine Suchfunktion implementieren, die auf einer Art Schlüsselwort basiert.

Dafür muss ich das Schlüsselwort LIKE verwenden, so viel weiß ich. Und ich habe auch vorbereitete Anweisungen verwendet, aber ich weiß nicht, wie ich sie mit LIKE verwenden soll, weil ich aus dem folgenden Code den 'keyword%' Hinzufügen würde.

Kann ich es direkt in der pstmt.setString(1, notes) als (1, notes+"%") Oder so etwas verwenden. Ich sehe viele Beiträge dazu im Web, aber nirgendwo eine gute Antwort.

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
155
ssn

Sie müssen es im Wert selbst festlegen, nicht in der vorbereiteten SQL-Anweisungszeichenfolge.

Das sollte also für ein Präfix-Match reichen:

notes = notes
    .replace("!", "!!")
    .replace("%", "!%")
    .replace("_", "!_")
    .replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
        "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");

oder ein Suffix-Match:

pstmt.setString(1, "%" + notes);

oder ein globales Spiel:

pstmt.setString(1, "%" + notes + "%");
256
BalusC

Code es so:

PreparedStatement pstmt = con.prepareStatement(
    "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes + "%");`

Stellen Sie sicher, dass Sie NICHT die Anführungszeichen '' wie unten einfügen, da sie eine Ausnahme verursachen.

pstmt.setString(1,"'%"+ notes + "%'");
25
PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?");
ps.setString(1, name + '%');

Probieren Sie dies aus.

4
Faiz
String fname = "Sam\u0025";

PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? ");

ps.setString(1, fname);
1
Ram Kumar