dbcp连接池创建的问题,请高手指点!

sunfire1980 2007-01-05 11:39:24

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool;

public class DaoUtil3 {

/** */
/**
* 数据库连接池
*
* @see http://jakarta.apache.org/commons/dbcp/index.html
*/
private static PoolingDriver driver = null;

/** */
/**
* 设置一个数据库连接池
*
* @param name
* 连接池的名称
* @param url
* 数据源
* @throws SQLException
*/
private static void setUpDriverPool(String name, String url)
throws SQLException {
if ((driver == null)/* || driver.getPoolNames().length < 2*/) {
try {
/** */
/**
* 首先创建一个对象池来保存数据库连接
*
* 使用 commons.pool 的 GenericObjectPool对象
*/
ObjectPool connectionPool = new GenericObjectPool();

/** */
/**
* 创建一个 DriverManagerConnectionFactory对象 连接池将用它来获取一个连接
*/
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
url, "meipuser","meippw"); //%---%
//url,getProperties());//*---*


/** */
/**
* 创建一个PoolableConnectionFactory 对象。
*/
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(
connectionFactory, connectionPool, null, null, false,
true);

/** */
/**
* 注册PoolingDriver。
*/
Class.forName("org.apache.commons.dbcp.PoolingDriver");

driver = (PoolingDriver) DriverManager
.getDriver("jdbc:apache:commons:dbcp:");

driver.registerPool(name, connectionPool);

} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}


/** */
/**
* 取得一个数据库连接对象。
*
* 因为可能使用两个不同的数据库, 所以依据report的值来确定使用那个数据库。
*
* @param report
* @return
*/
public static Connection getConnection() {
Connection con = null;

try {
// 装载mysql的jdbc驱动
System.out.println("dddddddddddddd");
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:oci:@192.168.0.11:1521:orcl";
String poolName = "test";
Class.forName(driver);
setUpDriverPool(poolName, url);
con = DriverManager.getConnection("jdbc:apache:commons:dbcp:"
+ poolName);
return con;
} catch (ClassNotFoundException cnfe) {
throw new RuntimeException("无法装入数据库引擎");
} catch (SQLException sqle) {
throw new RuntimeException("无法打开数据库连接");
}
}

/**
* 得到配置文件
* @return
*/
private static Properties getProperties(){
Properties p = new Properties();
p.setProperty("driverClassName", "oracle.jdbc.driver.OracleDriver");
p.setProperty("url", "jdbc:oracle:oci:@192.168.0.86:1522:orcl");
p.setProperty("username", "meipuser");
p.setProperty("password", "meippw");
p.setProperty("maxActive", "30");
p.setProperty("maxIdle", "10");
p.setProperty("maxWait", "1000");
p.setProperty("removeAbandoned", "false");
p.setProperty("removeAbandonedTimeout", "120");
p.setProperty("testOnBorrow", "true");
p.setProperty("logAbandoned", "true");

return p;
}


public static void main(String[] args){
Connection conn = null;
Statement st = null;
ResultSet rs = null;

try{
String sql = "select * from user";
conn = getConnection();
st = conn.createStatement();
rs = st.executeQuery(sql);
int numcols = rs.getMetaData().getColumnCount();
while (rs.next()) {
for (int i = 1; i <= numcols; i++) {
System.out.print(" " + rs.getString(i));
}
System.out.println("");
}
}catch(Exception e){
e.printStackTrace();
}finally{
closeAll(conn,st,rs);
}
}

}


小弟这几天要更换数据连接池机制,考虑使用DBCP连接池,上面是我创建的一个例子,已测试通过,但未做性能测试。请问,我创建的连接池是否是正确的?性能如何?还有,因为我想为连接池增加其他配置,本想用标记“*---*”的那行来替代标记“%---%”的代码,用properties对象来作为DriverManagerConnectionFactory的参数,可是执行却报异常,为什么不行呢?

...全文
481 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhongxin 2008-04-30
  • 打赏
  • 举报
回复
异常贴出来
Shine_Panda 2008-04-30
  • 打赏
  • 举报
回复
是什么异常啊。。。。。。。。。
代码好长 不好找啊。。
kokobox 2008-04-29
  • 打赏
  • 举报
回复
你要把异常贴出来大家才能更快的帮你解决o(∩_∩)o...
telfree 2008-04-29
  • 打赏
  • 举报
回复
顶一下吧!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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