我想确保新程序有效,DB2总是在缓存池中查询,我必须重新绑定数据库(db2rbind命令)。然后我在WebSphere上部署应用程序。但是,当我登录到应用程序时,会发生错误:
The cursor "SQL_CURSN200C4" is not in a prepared state..SQLCODE=-514 SQLSTATE=26501,DRIVER=3.65.97
更进一步,最奇怪的是错误只发生过一次。在此之后它永远不会发生,并且应用程序运行得非常好。我很好奇它是如何发生的,以及它只发生一次的原因。 ps:我的DB2版本是10.1 Enterprise Server Edition。 并且错误堆栈指向的sql非常简单,就像:
select * from table where 1=1 and field_name="123" with ur
答案 0 :(得分:0)
除非您在应用程序中另外配置(statementCacheSize = 0)或手动使用setPoolable(false),否则WebSphere Application Server数据源将缓存并重用PreparedStatements。重新绑定可能导致缓存中的语句变为无效。幸运的是,WebSphere Application Server具有-514错误代码的内置知识,并将从缓存中清除错误语句以响应此错误的发生,以便无效的预准备语句不会继续被重用并导致其他错误到申请。您可能正在遇到这种情况,这可以解释在重新绑定后错误仅发生一次。