Java DB2中的SQL-UPPER函数不工作
我使用IBMDB2Type4驱动程序(db2jcc4.jar)从JavaWeb应用程序连接到DB2数据库(DB2V9.7.400.501)。当我尝试执行这样的SQL语句时Java DB2中的SQL-UPPER函数不工作,java,sql,db2,jcc,Java,Sql,Db2,Jcc,我使用IBMDB2Type4驱动程序(db2jcc4.jar)从JavaWeb应用程序连接到DB2数据库(DB2V9.7.400.501)。当我尝试执行这样的SQL语句时 SELECT * FROM USERS WHERE UPPER(USERNAME) = UPPER('testuser'); 我得到以下例外情况: com.ibm.db2.jcc.am.SqlSyntaxErrorException:db2 SQL错误: SQLCODE=-104,SQLSTATE=42601,SQLERRM
SELECT * FROM USERS WHERE UPPER(USERNAME) = UPPER('testuser');
我得到以下例外情况:
com.ibm.db2.jcc.am.SqlSyntaxErrorException:db2 SQL错误:
SQLCODE=-104,SQLSTATE=42601,SQLERRMC==
上限('testuser');语句结束,驱动程序=4.12.55
问题出在
上限
函数上,因为正常的select语句执行正常。也许您应该这样使用:
SELECT * FROM USERS WHERE UPPER(USERNAME) LIKE UPPER('testuser');
带“=”的代码对于SQLite来说似乎还可以,但不了解db2
UPD。经过一些调查,我可以说错误是由Java代码引起的,该代码试图使用“;”在一个查询中执行多个语句作为分隔符。
您应该尝试对多个语句使用PreparedStatement、addBatch()和executeBatch()
UPD2。这是与DB2相关的问题。PostgreSQL,afaik,允许在一个查询中使用多个语句。“语句结尾”可能会推断,无论您如何运行它,它都会将第一个单引号解释为字符串的结尾?您可以尝试用两个单引号替换单引号,以测试是否是这样。@Bridge现在我得到一个不同的异常:
com.ibm.db2.jcc.am.SqlSyntaxErrorException:db2 SQL错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=testuser;ER(LOGIN)=UPPER(“”;CONCAT,DRIVER=4.12.55
看起来我的猜测是错误的。您是否使用sql工具尝试过相同的语句(最好使用相同的驱动程序通过jdbc)?如果是,它是否会产生相同的错误?是的,我使用Eclipse数据库工具中的同一个驱动程序连接到同一个数据库,并执行了相同的语句。它工作得很好,没有任何区别。我得到了以下异常:com.ibm.db2.jcc.am.SqlSyntaxErrorException:db2sql错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=;;KE UPPER('testuser');语句末尾,DRIVER=4.12.55