转义圆括号和等号在prepareStatementin java,sql中。

时间:2015-10-27 01:59:58

标签: sql java-ee jdbc db2

我正在尝试编写一个sql语句,使用以下语句切换数据库中varchar(5)列的值。

stmt = connection.prepareStatement("UPDATE  TABLENAME  SET
                + MIDNIGHT =IF\\\\(MIDNIGHT=?,?,?\\\\)");
stmt.setString(1, "off");
stmt.setString(2, "on");
stmt.setString(3, "off");

但是我收到以下错误:

com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL错误:SQLCODE = -7,SQLSTATE = 42601,SQLERRMC = \; GHT = IF,DRIVER = 3.59.81

MIDNIGHT是列的名称,我试图在“开启”和“关闭”之间切换。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

SQL0007N - 角色""以下""不是   有效的。

     

<强>解释

     

指定的&#34;&#34;不是SQL中的有效字符   声明。 &#34;&#34; field表示SQL的20个字符   在无效字符之前的语句。

     

联合系统用户:某些数据源不提供   适当的值为&#34;&#34;和&#34;&#34;消息令牌。   在这些情况下,&#34;&#34;和&#34;&#34;将有以下内容   格式:&#34;:UNKNOWN&#34;,表示实际值   指定的数据源未知。

     

无法处理该声明。

     

用户响应:

     

删除或替换无效的字符。

     

sqlcode:-7

     

sqlstate:42601

此外,在您的查询中,您不能通过在Java中使用的方式使用IF语句。

可能的解决方法是使用案例陈述。

update TABLENAME  SET MIDNIGHT =
case when MIDNIGHT = ? then ?
     when MIDNIGHT = ? then ?
end;