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的参数,可是执行却报异常,为什么不行呢?