我一直无法找到这个问题的确切答案。我正在使用 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/