【问题标题】:SQL - UPPER function in DB2 not workingSQL - DB2 中的 UPPER 函数不起作用
【发布时间】: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 数据库工具中的相同驱动程序连接到相同的数据库并执行相同的语句。效果很好

标签: java sql db2 jcc


【解决方案1】:

也许你应该这样使用:

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

您的带有 '=' 的代码对于 SQLite 似乎没问题,但不了解 db2。

UPD。经过一番调查,我可以说错误是由 Java 代码引起的,它试图在一个查询中使用 ';' 执行多个语句作为分隔符。 您应该尝试对多个语句使用 PreparedStatement、addBatch() 和 executeBatch()。

UPD2。这是与 DB2 相关的问题。 PostgreSQL,afaik,允许在单个查询中使用多个语句。

【讨论】:

  • 不,没有任何区别。我得到了以下异常:com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;KE UPPER('testuser');END-OF-STATEMENT, DRIVER=4.12.55
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 2012-12-04
  • 2013-08-07
  • 1970-01-01
  • 2010-09-09
  • 2021-10-16
相关资源
最近更新 更多