Использование подстановочного знака "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();
5 ответов:
вам нужно установить его в самом значении, а не в подготовленной строке SQL оператора.
Итак, это должно сделать для префикса-match:
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 + '%');
попробуйте это.