2010-09-24 91 views

回答

0

大多数JDBC驱动程序每个连接只使用一个套接字。我认为MySQL也使用一个套接字。在多个线程之间共享一个连接是一个糟糕的性能想法。

如果在不同线程之间使用多个连接,那么每个连接都需要一个CallableStatment。每个连接都需要一个CallabaleStatement池。在这种情况下,最简单的方法是将连接类包装并将所有调用委托给原始类。 Eclipse的创建速度非常快。在包装方法prepareCall()中,您可以添加一个简单的池。您还需要一个CallableStatement的包装类。 close方法将CallableStatement返回到池中。

但是,首先你应该检查是否真的很贵,因为很多司机已经有这样的民意调查。创建一个prepareCall()和close()循环并计算时间。

0

连接不是线程安全的,所以你不能跨线程共享它。

当你的prepareCall,JDBC驱动程序(可能)是告诉RDBMS系统做了很多存储在服务器端的工作。你可能在这里犯了过早的优化。

0

给这个稍加思考后,它看来,如果您有问题,与此基础结构代码,然后你的问题是在其他地方。大多数应用程序不需要花费过多的时间来完成这些工作。
确保您使用的是DataSource,大部分都是连接缓存,有些甚至是缓存语句。
也是因为这是一个性能瓶颈,这意味着你正在一个接一个地做很多查询,或者你的连接池太小。也许你应该在你的代码上做一些基准测试,看看存储过程需要多长时间,而JDBC代码需要多少时间。
当然,我会遵循MySQL使用CallableStatement的建议,我相信他们已经对此进行了基准测试。大多数应用程序不会在线程之间共享任何内容,这很少是问题。