我使用IBM DB2 Type 4驱动程序(db2jcc4.jar)从我的Java Web应用程序连接到DB2数据库(DB2 v9.7.400.501)。当我尝试执行这样的SQL语句时,
SELECT * FROM USERS WHERE UPPER(USERNAME) = UPPER('testuser');
我得到以下异常:
com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL错误: SQLCODE = -104,SQLSTATE = 42601,SQLERRMC = ;; = UPPER('testuser'); END-OF-STATEMENT,DRIVER = 4.12.55
问题来自UPPER
函数,因为正常的select语句正常执行。
答案 0 :(得分:3)
也许你应该这样使用:
SELECT * FROM USERS WHERE UPPER(USERNAME) LIKE UPPER('testuser');
带有'='的代码对于SQLite似乎没问题,但是不知道关于db2。
UPD。经过一些调查,我可以说错误是由Java代码引起的,它试图在一个查询中使用';'执行多个语句作为分隔符。 您应该尝试对多个语句使用PreparedStatement,addBatch()和executeBatch()。
UPD2。这是与DB2相关的问题。 PostgreSQL,afaik,允许单个查询中的多个语句。