目前,对于每个查询,都会创建并重复使用准备好的语句。我没有使用任何连接池。C3P0 是一个被广泛推荐的库。
但是,由于 PreparedStatement 与连接相关联。在池化环境中,连接被返回到池中,从而有效地使 PreparedStatement 不可用。我对这个结论是否正确?有什么方法可以同时使用 Prepared Statement 和连接池?
更新:这是独立的应用程序。所以,我不能使用一个框架来获得正确的连接池。
目前,对于每个查询,都会创建并重复使用准备好的语句。我没有使用任何连接池。C3P0 是一个被广泛推荐的库。
但是,由于 PreparedStatement 与连接相关联。在池化环境中,连接被返回到池中,从而有效地使 PreparedStatement 不可用。我对这个结论是否正确?有什么方法可以同时使用 Prepared Statement 和连接池?
更新:这是独立的应用程序。所以,我不能使用一个框架来获得正确的连接池。
这取决于您使用的池化机制。大多数 Java EE 应用程序服务器都有连接池实现,其中有一个准备好的语句缓存以及池中的每个连接。因此,准备好的语句和连接一样被重用。我不知道任何具有此功能的独立池机制。
我相信如果您关闭连接,PreparedStatement 将“丢失”,但只要相同的连接保持打开状态,相同的 PreparedStatement 就应该可用。您应该查看 Spring 使用 JdbcTemplate 为您执行此操作。它将抽象出所有这些,因此您不必担心。只需将它传递给 DataSource 就可以了。
以下是如何使用 c3p0 作为 DataSource 对象:http: //forum.springframework.org/showthread.php ?t=13078
然后,您可以创建一个 JdbcTemplate bean 并将数据源作为构造函数参数传递,然后将 JdbcTemplate 注入您正在使用的任何 DAO 对象中。