在准备好的语句中使用“like”通配符

我正在使用预处理语句来执行mysql数据库查询。 我想实现一个基于关键字的searchfunction。

为此我需要使用LIKE关键字,那我知道。 我之前也使用过预处理语句,但是我不知道如何将它用于LIKE因为从下面的代码中我将添加'keyword%'

我可以直接在pstmt.setString(1, notes)使用它(1, notes+"%")或类似的东西。 我在网上看到很多post,但没有任何好的答案。

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

您需要将其设置在值本身中,而不是在准备的语句SQLstring中。

所以,这应该做一个前缀匹配:

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

或后缀匹配:

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

或全球比赛:

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

像这样编码:

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

确保你包括下面的引号,因为它们会导致exception。

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

试试这个。