使用“like"预处理语句中的通配符

我使用准备语句执行mysql数据库查询。我想实现一个基于关键字的搜索功能。

为此,我需要使用LIKE关键字,这是我所知道的。我以前也使用过预处理语句,但我不知道如何与LIKE一起使用它,因为从下面的代码中,我将在哪里添加'keyword%'?

我可以直接在pstmt.setString(1, notes)中使用它作为(1, notes+"%")或类似的东西吗?我在网上看到了很多关于这个问题的帖子,但没有一个好的答案。

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

您需要在值本身中设置它,而不是在准备好的语句SQL字符串中。

因此,这应该用于前缀匹配:

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

确保你包含下面这样的引号' ',因为它们会导致异常。

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

试试这个。

String fname = "Sam\u0025";


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


ps.setString(1, fname);
String query="select * from test1 where "+selected+" like '%"+SelectedStr+"%';";




PreparedStatement preparedStatement=con.prepareStatement(query);




// where seleced and SelectedStr are String Variables in my program

我们可以使用CONCAT SQL函数。

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

这很适合我的案子。