Подготовленный оператор не работает, даже если тот же запрос возвращает строку при запуске в toad - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь получить строку из БД с использованием подготовленного состояния, используя код, который выглядит примерно так:

PreparedStatement preparedStatement = null;
Connection con = new Connection ()  //pseudo Code added here
String query = "select * from abc where a=? and b=? and c=?";

preparedStatement = con.prepareStatement(query);

preparedStatement.setString(1,"x");

preparedStatement.setString(2,"y");

preparedStatement.setString(3,String.valueOf('Z'));

ResultSet resultset = preparedStatement.executeQuery();

if(resultset.next() == false)
{
  throw new exception("No records fetched");
}

но следующий запрос при выполнении через TOAD возвращает строку:

select * from abc where a='x' and b='y' and c='z';

Что я здесь не так делаю? (Третье условие в предложении where - это char).

1 Ответ

1 голос
/ 15 марта 2012

Эти два запроса различны, в TOAD вы выдаете

select * from abc where a='x' and b='y' and c='z'

, тогда как из подготовленного вами заявления вы делаете эквивалент:

select * from abc where a='x' and b='y' and c='Z'

z - этоне то же самое, что Z

Вам не нужно указывать параметры Oracle CHAR как Java char в setParameter, поэтому измените

preparedStatement.setString(3,String.valueOf('Z'));

на

preparedStatement.setString(3,"z");

или

preparedStatement.setString(3,String.valueOf('z'));

, вероятно, будет работать.

...