Java java.sql.SQLException, пока я пытаюсь объединить значение в подготовленный оператор
Я хотел добавить переменную в подготовленном заявлении и
String Query = "SELECT count(*) count from apps.fnd_user fu where "
+ "UPPER(fu.user_name) like 'ADMIN_ ||:1||' ";
PreparedStatement stmt = conn.prepareStatement(Query);
stmt.setString(1, CompanyName);
пока эта ошибка показывает. Любое исправление для этой ошибки..... Могу ли я согласиться с использованием каналов при подготовке заявления.
2 ответа
Решение
Не объединять в SQL. Сделайте это на Java:
String sql = "SELECT count(*) count" +
" FROM apps.fnd_user fu" +
" WHERE UPPER(fu.user_name) LIKE ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, "ADMIN_" + companyName);
try (ResultSet rs = stmt.executeQuery()) {
// code here
}
}
Обратите внимание, что:
- Маркер параметра
?
не:1
- Имена переменных Java должны начинаться со строчной буквы
- Вы должны использовать try-with-resources.
Если вы настаиваете на том, чтобы делать это в SQL, синтаксис будет (используя оператор конкатенации):
" WHERE UPPER(fu.user_name) LIKE 'ADMIN_' || ?";
Или (используя CONCAT()
функция):
" WHERE UPPER(fu.user_name) LIKE CONCAT('ADMIN_', ?)";
В Oracle CONCAT есть функция, попробуйте это:
like CONCAT('ADMIN_', ?);
Когда вы используете 'ADMIN_ ||:1||'
с setString
это просто SQL-литерал, как уже упоминалось @Andreas в комментарии, и это неправильный синтаксис.
Кроме того, я не уверен, что вы имели в виду под :1
Я думаю, что это должно ?
вместо.