今天我用dbcp写了一个测试程序,测试成功了。于是我想测试一下它的性能,我分别用JDBC和DBCP编写了获得数据库连接的方法:可是测试结果显示JDBC用时比DBCP还少,这是为什么呢?我很困惑,希望各位大侠帮帮我,谢谢!代码如下:
package test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;public class TestMain { private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:orcl92";
private String user = "scott";
private String pwd = "tiger"; private Connection conn = null;
private PreparedStatement pstm = null;
private ResultSet rs = null; public static void main(String[] args) { String sql = "SELECT * FROM book"; TestMain test = new TestMain(); long before = System.currentTimeMillis();
/*
* for(int i=0; i < 50; i++){
*
* Connection conn = test.getConnByJDBC(); test.executeQuery(conn, sql); }
*/
for (int i = 0; i < 50; i++) {
DataSource ds = test.getConnByDBCP();
Connection con = null;
try {
con = ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("建立数据源连接出错");
e.printStackTrace();
}
test.executeQuery(con, sql);
}
long after = System.currentTimeMillis();
System.out.println(after - before);
} public Connection getConnByJDBC() { try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("数据库驱动加载失败!");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库连接失败!");
e.printStackTrace();
}
return conn;
} public void executeQuery(Connection conn, String sql) { try {
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("bookname"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("创建PreparedStatement对象失败!");
e.printStackTrace();
}
} public DataSource getConnByDBCP() { BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(user);
ds.setPassword(pwd);
ds.setInitialSize(5); // 初始的连接数;
ds.setMaxActive(100);
ds.setMaxIdle(30);
ds.setMaxWait(1000);
DataSource dataSource = (DataSource) ds;
return dataSource;
}}
package test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;public class TestMain { private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:orcl92";
private String user = "scott";
private String pwd = "tiger"; private Connection conn = null;
private PreparedStatement pstm = null;
private ResultSet rs = null; public static void main(String[] args) { String sql = "SELECT * FROM book"; TestMain test = new TestMain(); long before = System.currentTimeMillis();
/*
* for(int i=0; i < 50; i++){
*
* Connection conn = test.getConnByJDBC(); test.executeQuery(conn, sql); }
*/
for (int i = 0; i < 50; i++) {
DataSource ds = test.getConnByDBCP();
Connection con = null;
try {
con = ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("建立数据源连接出错");
e.printStackTrace();
}
test.executeQuery(con, sql);
}
long after = System.currentTimeMillis();
System.out.println(after - before);
} public Connection getConnByJDBC() { try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("数据库驱动加载失败!");
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("数据库连接失败!");
e.printStackTrace();
}
return conn;
} public void executeQuery(Connection conn, String sql) { try {
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("bookname"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("创建PreparedStatement对象失败!");
e.printStackTrace();
}
} public DataSource getConnByDBCP() { BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(user);
ds.setPassword(pwd);
ds.setInitialSize(5); // 初始的连接数;
ds.setMaxActive(100);
ds.setMaxIdle(30);
ds.setMaxWait(1000);
DataSource dataSource = (DataSource) ds;
return dataSource;
}}
取得任意个连接都只需要一个数据源即可。