Java 准备好的语句失败,DB2 SQL错误:SQLCODE:-401,SQLSTATE:42818
我正在开发一个通过JDBC更新数据库(IBMDB2V9.7)中数据的应用程序。以下是表架构: 列名数据类型长度 1) 索引BIGINT- 2) 用户名VARCHAR 30 3) SRC VARCHAR 30 4) 状态VARCHAR 150 5) RT_计数BIGINT- 我的代码是:Java 准备好的语句失败,DB2 SQL错误:SQLCODE:-401,SQLSTATE:42818,java,jdbc,db2,prepared-statement,Java,Jdbc,Db2,Prepared Statement,我正在开发一个通过JDBC更新数据库(IBMDB2V9.7)中数据的应用程序。以下是表架构: 列名数据类型长度 1) 索引BIGINT- 2) 用户名VARCHAR 30 3) SRC VARCHAR 30 4) 状态VARCHAR 150 5) RT_计数BIGINT- 我的代码是: String cmd1="Update ANALYTICS SET RT_COUNT = 1 WHERE USER_NAME = ?
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_计数带出来,然后执行setInt或setLong或其他操作以使其正常工作 另外,我假设源和内容是字符串?如果不是,这也可能是原因之一 编辑 要执行我所说的RT_计数,您必须修改查询以执行以下操作:
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需要很长的时间。看看吧 根据IBM的网站,42818的SQLSTATE是42818“运算符或函数的操作数不兼容或不可比较”。这意味着您为准备好的语句设置了错误的数据类型 您可能需要将RT_计数带出来,然后执行setInt或setLong或其他操作以使其正常工作 另外,我假设源和内容是字符串?如果不是,这也可能是原因之一 编辑 要执行我所说的RT_计数,您必须修改查询以执行以下操作:
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需要很长的时间。看看吧 除了@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))
除了@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))
请提供您正在执行的语句(即,cmd1),因为这是解决此问题的关键。在字符串cmd1中,我将其称为RT_计数和用户名,因此这不是错误。请提供您正在执行的语句(即,cmd1),因为这是解决此问题的关键。在字符串cmd1中,我提到它是RT_计数和用户名,所以这不是一个错误。仅供参考,这里是网站的链接,其中包含消息:是的,它们是字符串。你能告诉我RT_计数的事情吗?谢谢你的链接。但是没有帮助,已经检查过了:-如果你用样本值手动执行查询是否有效?仅供参考,这是网站的链接,上面有消息:是的,它们是字符串。你能告诉我RT_计数的事情吗?谢谢你的链接。但是没有帮助,已经检查过了:-如果你用样本值手动执行查询,查询是否有效?