Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以对Java中的任意数据库连接使用准备好的语句吗?_Java_Sql_Oracle11g - Fatal编程技术网

我可以对Java中的任意数据库连接使用准备好的语句吗?

我可以对Java中的任意数据库连接使用准备好的语句吗?,java,sql,oracle11g,Java,Sql,Oracle11g,[Java 7/Oracle]我有一个多线程应用程序,我计划在其中使用数据库连接池。我想使用事先准备好的声明;然而,准备好的语句似乎包含并因此似乎不可分割地绑定到单个数据库连接对象。我想要的范例不是“打开一个连接,准备一个语句,做数千次相同的查询,然后关闭连接”,好像到处都是示例代码;我想要的范例是“预编译此语句以便尽可能高效地运行—从池中获取随机连接—针对该连接执行语句—将连接释放回池”。这在Java中可能吗?如果您使用连接池,那么当您调用conneciton对象上的close时,连接实际上并

[Java 7/Oracle]我有一个多线程应用程序,我计划在其中使用数据库连接池。我想使用事先准备好的声明;然而,准备好的语句似乎包含并因此似乎不可分割地绑定到单个数据库连接对象。我想要的范例不是“打开一个连接,准备一个语句,做数千次相同的查询,然后关闭连接”,好像到处都是示例代码;我想要的范例是“预编译此语句以便尽可能高效地运行—从池中获取随机连接—针对该连接执行语句—将连接释放回池”。这在Java中可能吗?

如果您使用连接池,那么当您调用conneciton对象上的
close
时,连接实际上并没有关闭。相反,它会返回到池中。这通常是通过将原始连接包装在代理中来实现的,代理将拦截您对
close
的调用


许多连接池和一些驱动程序提供了缓存准备好的语句的可能性,以解决连续准备相同语句的问题。当然,因为准备好的语句链接到了连接,所以对于池中的每个连接,您可能都会看到相同的语句。

谢谢。这基本上就是我要做的。我将在每个连接对象中保留一个HashMap缓存,其中包含准备好的语句,这些语句将在第一次引用时初始化(我认为我有一个不错的方案,通过该方案,我可以为每个语句使用整数标识符,以便比按名称进行更快速的查找),并在针对特定连接对象的后续调用中重用。这个数字足够低,不会造成太大的资源浪费,但它仍然让我感到有点不舒服。@Jacklthorton嗯,你为什么不让你的池提供者来缓存语句呢?例如,看一看。您不必使用Tomcat容器来使用它们的池。