Код: Выделить всё
Select * from guest gg where
gg.city LIKE CONCAT('PHOENI_' , '%');
Код: Выделить всё
pstmt.setString(1, x); // dummy value 1
[img]https: //i.sstatic.net/f5zSzfJ6.png[/img]
Я вижу, что если целевая строка не имеет одинарных кавычек, то AcceptedStatement добавит одинарные кавычки вокруг цели String (случай 1 изображения), но если я добавлю одинарные кавычки где-нибудь внутри целевой строки, то ReadyStatement добавит одинарную кавычку перед каждой встреченной одиночной кавычкой.
Я попробовал представленное здесь решение: использование подстановочного знака «нравится» в подготовленном операторе, но результат тот же.
Я думаю, проблема в том, что строковое значение, которое ReadedStatement будет использовать для замены маркера, всегда будет иметь "%" (вот как классы они очень старые и, по крайней мере, не могут быть изменены сейчас). В принципе, я не могу сделать что-то подобное:
Код: Выделить всё
Select * from guest gg where gg.city LIKE CONCAT(? , '%');
pstmt.setString(1, "xyz"); // the string that will be used to replace the marker will either have "%" or not.
Код: Выделить всё
Select * from guest gg where
gg.city LIKE CONCAT('PHOENI_' , '%');
Изменить 1:
Запрос формируется с использованием специального класса (CreateCriteria). Этот класс имеет 3 параметра:
- type(тип данных, который будет заменять '?')
- operator( LIKE CONCAT , LIKE и т. д.)
- значение (значение для замены '?')
Код: Выделить всё
this.pstmt = m_con.prepareStatement(qry.toString());
Подробнее здесь: https://stackoverflow.com/questions/788 ... dstatement
Мобильная версия