4

目前,对于每个查询,都会创建并重复使用准备好的语句。我没有使用任何连接池。C3P0 是一个被广泛推荐的库。

但是,由于 PreparedStatement 与连接相关联。在池化环境中,连接被返回到池中,从而有效地使 PreparedStatement 不可用。我对这个结论是否正确?有什么方法可以同时使用 Prepared Statement 和连接池?

更新:这是独立的应用程序。所以,我不能使用一个框架来获得正确的连接池。

4

3 回答 3

1

这取决于您使用的池化机制。大多数 Java EE 应用程序服务器都有连接池实现,其中有一个准备好的语句缓存以及池中的每个连接。因此,准备好的语句和连接一样被重用。我不知道任何具有此功能的独立池机制。

于 2009-05-02T07:35:19.323 回答
0

我相信如果您关闭连接,PreparedStatement 将“丢失”,但只要相同的连接保持打开状态,相同的 PreparedStatement 就应该可用。您应该查看 Spring 使用 JdbcTemplate 为您执行此操作。它将抽象出所有这些,因此您不必担心。只需将它传递给 DataSource 就可以了。

以下是如何使用 c3p0 作为 DataSource 对象:http: //forum.springframework.org/showthread.php ?t=13078

然后,您可以创建一个 JdbcTemplate bean 并将数据源作为构造函数参数传递,然后将 JdbcTemplate 注入您正在使用的任何 DAO 对象中。

于 2009-05-02T05:03:17.520 回答
0

当我从“高性能 MySQL”中看到这个材料时,它让我觉得你必须对你的 MySQL 配置做一些超出你在 Java 中设置的任何事情的事情。您是否编辑了 my.cnf 文件?

另外,您是否查看过有关该主题的其他 SO 问题

编辑:Spring 是一个可以帮助池化的框架,非常适合独立应用程序。

于 2009-05-02T12:12:00.890 回答