java - 使用连接池时,我应该在每次查询时获取连接还是每批获取一次连接?

标签 java postgresql jdbc connection-pooling c3p0

我一直无法找到这个问题的确切答案。我正在使用 C3P0 的 ComboPooledDataSource。以下哪种方法更适合实践:

dataSource = connectionClass.getDataSource();
conn = dataSource.getConnection;
executeQuery(query1, conn);
executeQuery(query2, conn);
...
executeQuery(finalQuery, conn);
conn.close();

或者

executeQuery(query1);
executeQuery(query2);
...
executeQuery(finalQuery);

其中executeQuery:

conn = dataSource.getConnection;
st = conn.createStatement();
rs = executeQuery(query);
conn.closed();

简而言之,我必须经常进行大量的查询。采用第一个设计是否更好,它为每个批处理获取一次连接并将其作为参数传递。或者最好采用第二种方法,每次调用executeQuery 方法时都获得一个连接。如果我使用 DriverManager ,我显然会选择第一个(仅获得一次连接),但是当使用 C3P0 包时,我不确定这样做是否是正确的方法。或者这样的包并不重要?

最佳答案

使用连接池时,差异可以忽略不计,因为即使使用第二种方法,恢复池化连接也只需要很少的时间。尽管如此,使用第一种方法是更好的方法,因为

  • 它避免了从池中获取连接的额外(少量)开销。

  • 如果您稍后需要引入事务(执行所有更改,或者在发生错误时方便、安全地回滚您的更改),那么第一种方法是您唯一的选择。

关于java - 使用连接池时,我应该在每次查询时获取连接还是每批获取一次连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18209306/

相关文章:

sql - 在 SQL 中是否可以有多个列级命名约束?语法是什么?

sql - Postgresql插入多行选择

java - 使用 Java 查询从数据库中选择值并将它们用作变量并将其插入另一个表中

java - 方法 listFiles(Path, boolean) 对于类型 FileSystem 是未定义的

java - 在android中创建自定义 map

java - 增强lucene中的一些单词

postgresql - INSERT 到只有一个序列列的表实际上并没有插入任何东西

java - 合并两个数组而不使用额外空间

java - Shiro自定义认证逻辑

java - 传递日期参数以创建日期范围查询