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

为此,我需要使用LIKE关键字,我知道这么多。我以前也使用过准备好的语句,但我不知道如何使用LIKE,因为从下面的代码中,我将在哪里添加'关键字%'?

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

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

您需要在值本身中设置它,而不是在准备好的语句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();

这很适合我的案子。