准备好的语句失败,出现DB2 SQL错误:SQLCODE:-401,SQLSTATE:42818

问题描述:

我正在研究通过JDBC更新数据库(IBM DB2 v 9.7)中的数据的应用程序。这里的表模式:准备好的语句失败,出现DB2 SQL错误:SQLCODE:-401,SQLSTATE:42818

列名数据类型长度

1)INDEX BIGINT -

2)USER_NAME VARCHAR 30

3)SRC VARCHAR 30

4)STATUS VARCHAR 150

5)RT_COUNT BIGINT -

而我的代码是:

         String cmd1="Update ANALYTICS SET RT_COUNT = 1 WHERE USER_NAME = ? AND STATUS = ?"; 
            PreparedStatement process=connection.prepareStatement(cmd1); 

       process.setString(1, Source); 
       process.setString(2, Content); 


       if(process.executeUpdate()==0) 
       {.... 

但它失败了,任何人都可以帮助我吗?

感谢和问候

+0

请提供您正在执行的语句(即,cmd1),因为这是解决这个问题的关键。 – 2012-02-16 14:19:14

+0

对不起,我很粗心:( – nikel 2012-02-16 14:21:19

+0

在字符串cmd1中,我已经提到它作为RT_COUNT和USER_NAME,所以这不是一个错误.. – nikel 2012-02-16 14:22:42

根据IBM的网站中,42818的SQLSTATE是42818“的运算符或函数的操作数不兼容或者不具有可比性。”这意味着您将错误的数据类型设置为准备好的语句。

您可能需要将RT_COUNT取出并执行setInt或setLong或其他操作才能使其工作。

此外,我假设来源和内容是字符串?如果不是,那也可能对此有所贡献。

编辑 要做到RT_COUNT事情我说的是,你将不得不修改您的查询执行以下操作:

String cmd1="Update ANALYTICS SET RT_COUNT = ? WHERE USER_NAME = ? AND STATUS = ?"; 
PreparedStatement process = connection.prepareStatement(cmd1); 

process.setLong(1, new Long(1)); 
process.setString(2, source); 
process.setString(3, content); 

if(process.executeUpdate()==0) 
{.... 

这实际上可能是你的问题,因为我不知道司机如何解释“1”。它需要是Long来映射到DB2中的bigint。请参阅what data types in Java map to what data types in DB2

+1

就像fyi一样,这里是该网站的链接与消息:http:/ /publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.messages.doc/doc/rdb2stt.html – 2012-02-16 14:25:15

+0

是的,他们是Strings.Could你请更新我的RT_COUNT事情? – nikel 2012-02-16 14:26:27

+0

并感谢您的Link.But没有帮助,已检查它: - | – nikel 2012-02-16 14:28:30

除了铸造在Java中,如果你知道的参数应该是什么类型的,你也可以扮演他们在SQL中,像这样的@克里斯Aldrich公司的回答是:

UPDATE ANALYTICS 
    SET RT_COUNT = CAST(? AS BIGINT) 
WHERE USER_NAME = CAST(? AS VARCHAR(30)) 
    AND STATUS = CAST(? AS VARCHAR(150))