Использование подстановочного символа "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();

Ответ 1

Вам нужно установить его в самом значении, а не в строке 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 + "%");

Ответ 2

Введите код так:

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

Убедитесь, что вы НЕ НЕ включаете кавычки '', как показано ниже, поскольку они вызывают исключение.

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

Ответ 3

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

Попробуйте это.

Ответ 4

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