Jdbc с oracle db - использование маркера параметра с подобным условием

В JDBC с БД Oracle я хочу получить сотрудников, имя которых начинается с определенной буквы. Как я могу использовать маркер параметра "?" в подобном состоянии? Метод setXXX() не видит его, когда я помещаю его в одну цитату.

бывший:

PreparedStatement ps = null;
String sql="SELECT FIRST_NAME, LAST_NAME, SALARY FROM EMPLOYEES WHERE FIRST_NAME like '?%'";
ps = conn.prepareStatement(sql);
ps.setString(1, firstName);

Наконец нашел возможный дубликат, но должен быть лучший, подход этого шоу rzwitserloot тоже ....

Alex Poole 13.09.2018 20:26
0
1
101
2

Ответы 2

Объедините связанное значение с подстановочным знаком:

"SELECT FIRST_NAME, LAST_NAME, SALARY FROM EMPLOYEES WHERE FIRST_NAME like ? || '%'"

Вы также можете явно проверить первую букву с помощью чего-то вроде:

"SELECT FIRST_NAME, LAST_NAME, SALARY FROM EMPLOYEES WHERE SUBSTR(FIRST_NAME, 1, 1) = ?"

но это может быть менее эффективным (если вы не добавите индекс на основе функций).

Обычный способ - установить% в вызове setX, чтобы ваш запрос стал SELECT FIRST_NAME, LAST_NAME, SALARY FROM EMPLOYEES WHERE FIRST_NAME like ?, а затем .setString(1, firstChar + "%");.

Альтернатива такая, как ответил @Alex Poole: используйте WHERE FIRST_NAME like (? || '%')

NB: Этот ответ был отредактирован: в конце запроса был указан ошибочный%; он был удален.

Однако у вас не должно быть% в заявлении, верно?

Alex Poole 13.09.2018 20:27
like ?% работать не будет. Этот % должен быть в строковом литерале, поэтому ? || '%' - единственное, что будет работать.
Mark Rotteveel 15.09.2018 11:55

Другие вопросы по теме