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