【发布时间】:2011-08-30 23:21:46
【问题描述】:
我对 Prepared Statement 和连接池的一般使用有疑问。
Prepared Statements 通常只绑定到一个连接。在我们的应用程序中,PreparedStatement 在启动时创建并在稍后执行。
如果在执行某些特定的预准备语句时,与预准备语句相关联的连接正忙于执行其他语句,而不是该所需语句将如何执行。此语句将等待连接获得空闲还是此语句将执行优先?
更新
我已经通过使用 Apache derby 数据库的 SLEEP() 函数对此进行了测试,该数据库调用了 TimeHandlingTest 类中的 java 函数 sleep。
CREATE FUNCTION SLEEP() 返回整数语言 JAVA 参数样式 JAVA NO SQL 外部名称 'com.derby.test.TimeHandlingTest.sleep';
并从一个连接创建两个准备好的语句,并从一个准备好的语句和简单的 sql select 调用 Sleep() 函数。简单的 sql 选择几乎与第一个准备好的语句休眠的时间相同(10 秒)。这意味着一个连接对象一次不能用于执行多个准备好的语句。如果我错了,请纠正我。
【问题讨论】:
-
您的代码是否在应用服务器中运行?当您使用 DataSource 而不是 DriverManager 来获取连接时,答案会有所不同。
-
@Vineet:我们的应用程序是一个简单的 java 应用程序,它没有在应用程序服务器上运行。我们正在从驱动程序管理器获取连接。
标签: java jdbc connection-pooling