2016-11-19 77 views

回答

1

了解更多有关您需要拨打WSCallHelper.clearStatementCache(connection)的场景将会有所帮助,但根据您所描述的内容,我会假设它只在错误路径上调用。

在Liberty中,没有API以编程方式清除语句缓存。但是,只有在许多属性相同的情况下才能匹配高速缓存的语句,例如:SQL字符串,RS可保存性,模式,隔离级别以及其他一些属性。

为什么你不需要clearStatementCache:你打电话clearStatementCache是​​在对数据库中找不到包,但包应该在任何SQL字符串或模式来体现描述
的示例场景。因此,假设您的应用程序不重试失败的SQL字符串,则根本不需要调用clearStatementCache。

如果你真的要清除语句缓存:
正如JDBC规范定义,声明是一个连接的子对象。因此,清除语句缓存的一种创造性方式是摆脱与错误语句的联系。调用connection.close()可能无法完成此操作,因为应用程序服务器可能会汇集连接,但调用connection.abort()将清除底层连接并因此清除语句高速缓存。

1

我们还应该指出,如果您希望采用更具针对性的方法,并且希望从缓存中删除特定语句(或者首先不要进入缓存),则可以使用JDBC规范API java.sql.Statement.setPoolable(false) 。在关闭语句句柄之前调用它。应用程序服务器不会缓存标记为poolable = false的语句。

相关问题