JDBC连接是否包含对其PreparedStatement的硬引用?

时间:2014-04-26 08:46:25

标签: jdbc oracle11g garbage-collection

我想缓存我构建的预准备语句。当他们建立的连接是CG时,我想忘记准备好的陈述。

我想制作一个连接 - >语句的WeakHashMap,但这不会起作用。语句包含对其连接对象的硬引用,因此连接永远不会是GC' d。

因此,我可以将连接对象的WeakHashMap保存到对每个连接的预准备语句的弱引用。但是如果连接对象没有对语句的硬引用,则语句将获得GC' d。另一方面,如果它确实那么一切都很甜蜜。

我们知道它是否确实存在?

2 个答案:

答案 0 :(得分:0)

确定。首先,没有定义行为。其次,答案是否定的 - 准备好的陈述是GC,除非你对它们有一个硬性的引用。

我认为我试图做的事情实际上可能是不可能的java引用和我的代码不创建连接和准备语句对象的事实。

好吧,好吧。当我需要时,我会把新的PreparedStatements包装好,并在使用后释放它们。

答案 1 :(得分:0)

Oracle将为您缓存连接和语句。尝试开发自己的缓存不太可能有任何实际价值。

http://docs.oracle.com/cd/E11882_01/java.112/e16548/stmtcach.htm#JJDBC28649