2012-04-02 2 views
2

Я подключаюсь к базе данных DB2 (DB2 v9.7.400.501) из своего веб-приложения Java с помощью драйвера IBM DB2 Type 4 (db2jcc4.jar). При попытке выполнить оператор SQL, как это,Функция SQL - UPPER в DB2 не работает

SELECT * FROM USERS WHERE UPPER(USERNAME) = UPPER('testuser'); 

я получаю следующее исключение:

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;= UPPER('testuser');END-OF-STATEMENT, DRIVER=4.12.55

Проблема заключается в функции UPPER так, нормальный оператор выбора выполняет нормально.

+0

«КОНЕЦ-ЗАЯВЛЕНИЕ», возможно, вывести, что, однако, вы используете его, интерпретируя первую одинарную цитату как конец строки? Вы можете попробовать заменить одиночные кавычки двумя одинарными кавычками для проверки, если это так. – Bridge

+0

@Bridge Теперь я получаю другое исключение: 'com.ibm.db2.jcc.am.SqlSyntaxErrorException: ошибка DB2 SQL: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = testuser; ER (LOGIN) = UPPER (''; CONCAT, DRIVER = 4.12.55' – user1135357

+0

Похоже, что моя догадка была неправильной – Bridge

ответ

2

Может быть, вы должны использовать этот путь:

SELECT * FROM USERS WHERE UPPER(USERNAME) LIKE UPPER('testuser'); 

Ваш код с «=» это кажется нормально для SQLite, но не знаю anbout db2.

UPD. После некоторого расследования я могу сказать, что ошибка вызвана кодом Java, который пытается выполнить несколько операторов в одном запросе, используя ';' как разделитель. Вы должны попробовать использовать PreparedStatement, addBatch() и executeBatch() для нескольких операторов.

UPD2. Это проблема, связанная с DB2. PostgreSQL, afaik, позволяет несколько операторов в одном запросе.

+0

Нет, это не имеет никакого значения. Я получил следующее исключение: 'com.ibm.db2.jcc.am.SqlSyntaxErrorException: ошибка DB2 SQL: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = ;; KE UPPER ('testuser'); КОНЕЦ-ЗАЯВЛЕНИЕ , DRIVER = 4.12.55' – user1135357

Смежные вопросы