我一直无法找到这个问题的确切答案。我正在使用C3P0的ComboPooledDataSource
。以下哪种方法更好:
dataSource = connectionClass.getDataSource();
conn = dataSource.getConnection;
executeQuery(query1, conn);
executeQuery(query2, conn);
...
executeQuery(finalQuery, conn);
conn.close();
OR
executeQuery(query1);
executeQuery(query2);
...
executeQuery(finalQuery);
其中executeQuery
:
conn = dataSource.getConnection;
st = conn.createStatement();
rs = executeQuery(query);
conn.closed();
简而言之,我必须经常进行大量的查询。使用第一个设计更好,它为每个批次获取一次连接并将其作为参数传递。或者更好的方法是使用第二种方法,每次调用executeQuery方法时都获得连接。如果我使用的是DriverManager
,我显然会选择第一个(只获得连接一次),但是当使用C3P0包时,我不确定这样做是否正确。或者这个包裹无关紧要?
答案 0 :(得分:2)
使用连接池,差异是可以忽略的,因为即使您使用第二种方法,带回池连接也只需要很少的时间。尽管如此,使用第一种方法是更好的方法,因为
它避免了从池中获取连接的额外(小)开销。
如果您以后需要引入交易(执行所有更改,或者出现错误,方便安全地回滚您的更改),那么第一种方法是您唯一的选择。
< / LI>答案 1 :(得分:1)
一些意见/建议