【发布时间】:2019-06-14 12:29:48
【问题描述】:
PreparedStatment ps = null;
public void executeQueries(){
try{
ps = conn.prepareStatement(Query1);
// Execute Query1 here and do the processing.
ps = conn.prepareStatement(Query2);
// Execute Query2 here and do the processing.
//... more queries
}catch(){}
finally{
ps.close(); // At this point would the caching of queries in DB be lost?
}
}
在我的应用程序中,我经常调用方法executeQueries()。
我的问题是,如果我关闭方法内 finally 块中的PreparedStatement(我经常使用),数据库系统会删除缓存吗?如果是,我可以为整个应用程序创建一个全局PreparedStatement,因为我的应用程序中有大量查询数据库的 JAVA CLASSES。
谢谢!
更新:问题已被标记为重复,但链接的线程根本没有回答我的问题。 AFAIK,数据库系统将执行的查询存储在缓存中。它还存储他们的执行计划。这就是PreparedStatement 比Statement 表现更好的地方。但是,我不太确定在关闭PreparedStatement 后是否会删除与查询相关的信息。
【问题讨论】:
-
为什么会这样?
-
阅读@dogbane 的回答,解决您的问题。
-
@TimBiegeleisen 请参考问题中的更新。
-
@Thilo 这不是一个完全不合理的问题。 = 无意暗示它是。我对任何表明发生这种情况的文档更感兴趣。
-
@TimBiegeleisen 我不能代表 MySQL,但以 Oracle 为例,如果你准备一个语句,它会为它缓存一个编译的执行计划,这将在你的数据库连接中继续存在(这样另一个使用相同 SQL 语句的同一用户的连接将从中受益)。