准备好的语句失败,出现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)
{....
但它失败了,任何人都可以帮助我吗?
感谢和问候
答
根据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。
答
除了铸造在Java中,如果你知道的参数应该是什么类型的,你也可以扮演他们在SQL中,像这样的@克里斯Aldrich公司的回答是:
UPDATE ANALYTICS
SET RT_COUNT = CAST(? AS BIGINT)
WHERE USER_NAME = CAST(? AS VARCHAR(30))
AND STATUS = CAST(? AS VARCHAR(150))
请提供您正在执行的语句(即,cmd1),因为这是解决这个问题的关键。 – 2012-02-16 14:19:14
对不起,我很粗心:( – nikel 2012-02-16 14:21:19
在字符串cmd1中,我已经提到它作为RT_COUNT和USER_NAME,所以这不是一个错误.. – nikel 2012-02-16 14:22:42