Jdbc DB2SQL错误:SQLCODE=-514,SQLSTATE=26501

Jdbc DB2SQL错误:SQLCODE=-514,SQLSTATE=26501,jdbc,db2,Jdbc,Db2,当我使用JDBC执行准备好的语句时,如下所示: select count(1) from TableName where col1 = 9 and col2 = ? 它出现了一个DB2 SQL错误: SQLCODE=-514,SQLSTATE=26501,SQLERRMC=SQL\u CURSH200C1,DRIVER=3.64.104 更重要的是,这个问题并不是每次都会出现,有时它可以成功地查询 谁能告诉我这个问题的原因,非常感谢 PS:DB2版本是9.5,这里有一个到的链接,您可以自己查找

当我使用JDBC执行准备好的语句时,如下所示:

select count(1) from TableName where col1 = 9 and col2 = ?
它出现了一个DB2 SQL错误:

SQLCODE=-514,SQLSTATE=26501,SQLERRMC=SQL\u CURSH200C1,DRIVER=3.64.104

更重要的是,这个问题并不是每次都会出现,有时它可以成功地查询

谁能告诉我这个问题的原因,非常感谢

PS:DB2版本是9.5,这里有一个到的链接,您可以自己查找下一个错误

DB2认为select使用的是游标。试一试

select count(*) from TableName where col1 = 9 and col2 = ?
看看错误是否消失了

下面是IBMDB2错误代码手册中对错误的完整解释

-514

光标名称未处于准备状态

解释 应用程序试图使用未处于准备状态的游标“游标名称”。光标与以下语句关联:

  • 他从来没有准备好
  • 已由提交或回滚操作无效
  • 系统作用 无法处理该语句。 程序员响应

    对于案例1,在尝试打开游标之前,请确保准备了在“游标名称”的DECLARE CURSOR语句中命名的语句

    对于案例2,采取以下操作之一:

    • 使用DECLARE CURSOR的WITH HOLD选项
    • 在使用完光标之前,不要执行提交或回滚操作
    • 在提交或回滚后再次准备语句

    如果在运行executeQuery()之前没有正确准备语句,则可能会出现此问题。如果正确准备了查询并且正确设置了值,请检查代码


    如果无法获取错误,请放置用于准备语句并执行的完整代码段。

    谢谢。在提出问题之前,我已经阅读了这个DB2错误代码解释,但我仍然不知道解释与问题之间的关系。我没有为语句声明游标,也没有执行提交或回滚操作。请您向我解释更多的细节,非常感谢。@kingson:更改您准备好的语句,使其看起来像我在回答中给您的语句。使用
    count(*)
    而不是
    count(1)
    真的会混淆解析器吗?@a_horse_with_no_name:这不是常见的DB2错误,所以我真的不知道。该错误可能由代码的其他部分触发。我想kingson可以告诉我们我的回答是否有效。@kingson:那么我们必须在代码中看到所有DB2语句。向代码展示如何准备和执行语句