Verwenden von “like” Wildcard in vorbereiteter statement

Ich verwende vorbereitete statementen, um mysql databaseabfragen auszuführen. Und ich möchte eine Suchfunktion basierend auf einem Keyword implementieren.

Dafür muss ich das LIKE Schlüsselwort verwenden, soviel weiß ich. Und ich habe vorher auch vorbereitete statementen verwendet, aber ich weiß nicht, wie ich es mit LIKE weil ich aus dem folgenden Code das 'keyword%' hinzufügen würde?

Kann ich es direkt im pstmt.setString(1, notes) als (1, notes+"%") oder so ähnlich verwenden. Ich sehe eine Menge Beiträge im Internet, aber nirgends eine gute Antwort.

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

   

Sie müssen es im Wert selbst und nicht in der SQL-Zeichenfolge der vorbereiteten statement angeben.

Also, das sollte für eine Präfix-Übereinstimmung tun:

 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 + "%"); 

Code es wie folgt:

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

Stellen Sie sicher, dass Sie die Anführungszeichen ” nicht unten einfügen, da sie eine Ausnahme verursachen.

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

Probieren Sie es aus.

 String fname = "Sam\u0025"; PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? "); ps.setString(1, fname);