关于DBCP连接池效率的问题

笨马克 2006-09-30 03:08:34
首先我尝试用jdbc直接连数据库,代码为:
public Static Connection getConnection() throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@xx.x.x.xxx:1521:sid";
String user = "user";
String passwd = "pwd";
return DriverManager.getConnection(url, user, passwd);
}

然后我尝试用dbcp,代码为:
public static Connection getConnection() throws SQLException{
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
bds.setUrl("jdbc:oracle:thin:@xx.x.x.xxx:1521:sid");
bds.setUsername("user");
bds.setPassword("pwd");
bds.setMaxActive(50);
bds.setMaxIdle(10);
bds.setMaxWait(100000);
return bds.getConnection();
}

对于连接效率的测试,我用的是如下的代码:
for (int i=0;i<100;i++){
ps = this.getConnection().prepareStatement(sql_test);
ps.setInt(1,i);
ps.execute();
ps.close();
}
结果为:
jdbc连接:平均10s插入一条数据
dbcp连接:平均10s插入一条数据

另外,我用spring+hibernate,连接也用dbcp(默认配置),在dao层通过session来取得connection来执行sql语句,效率非常高,插入1000条不需要1s.

请问:
1.是我的dbcp的使用有问题吗?为什么效率这么低?
2.为什么通过spring+hibernate来调用dbcp,效率会高n个数量级?

...全文
293 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlopen 2006-10-01
  • 打赏
  • 举报
回复
每次prepareStatement都新new出一个BasicDataSource,效率不低才怪
把bds改为public static,每次使用时只bds.getConnection()应该就好了,初始化它的那段代码放到别的代码里,就调一次就行

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧