Java java.sql.SQLException, пока я пытаюсь объединить значение в подготовленный оператор - PullRequest
0 голосов
/ 16 мая 2018

Я хотел добавить переменную в подготовленном утверждении и

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 ]

0 голосов
/ 16 мая 2018

Не объединять в 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_', ?)";
0 голосов
/ 16 мая 2018

В Oracle есть функция CONCAT , попробуйте это:

like CONCAT('ADMIN_', ?);

Когда вы используете 'ADMIN_ ||:1||' с setString, это просто SQL-литерал, как уже упоминалось @Андреас в комментарии, и это неправильный синтаксис .


Кроме того, я не уверен, что вы имели в виду под :1, я думаю, что вместо ?.

...