在MySQL中一起使用准备语句和连接池

时间:2009-05-02 04:40:27

标签: java mysql connection-pooling prepared-statement

目前,对于每个查询,都会创建并重用Prepared Statement。我没有使用任何连接池。 C3P0是一个广泛推荐的库。

但是,由于PreparedStatement与连接相关联。在池化环境中,连接将返回到池中,从而有效地使PreparedStatement无法使用。我对这个结论是否正确?有没有办法一起使用Prepared Statement和连接池?

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

当我从“高性能MySQL”中看到this material时,它让我觉得你必须对你的MySQL配置做一些事情,超出你在Java中设置的任何东西。你编辑过my.cnf文件了吗?

另外,您是否看过other SO questions主题?

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