【发布时间】:2012-04-15 21:31:54
【问题描述】:
我正在使用 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语句执行正常。
【问题讨论】:
-
"END-OF-STATEMENT" 可能会推断您正在运行它会将第一个单引号解释为字符串的结尾?您可以尝试用两个单引号替换单引号来测试是否是这样。
-
@Bridge 现在我得到一个不同的例外:
com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=testuser;ER(LOGIN) = UPPER('';CONCAT, DRIVER=4.12.55 -
看来我的猜测是错误的。
-
您是否尝试过使用 sql 工具执行相同的语句(最好通过具有相同驱动程序的 jdbc)?如果是,是否会产生相同的错误?
-
是的,我使用 Eclipse 数据库工具中的相同驱动程序连接到相同的数据库并执行相同的语句。效果很好