我正在开发一个通过JDBC更新数据库(IBM DB2 v 9.7)中的数据的应用程序。这是表模式:
列名数据类型长度
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 :(得分:2)
根据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”的。它需要很长才能映射到DB2中的bigint。请参阅what data types in Java map to what data types in DB2。
答案 1 :(得分:2)
除了@Chris Aldrich在Java中进行强制转换的答案之外,如果你知道参数应该是什么类型,你也可以在SQL中强制转换它们,如下所示:
UPDATE ANALYTICS
SET RT_COUNT = CAST(? AS BIGINT)
WHERE USER_NAME = CAST(? AS VARCHAR(30))
AND STATUS = CAST(? AS VARCHAR(150))