配好了连接池之后,我对有连接池和没有连接池的数据库访问性能作了一下对比。同样的连接条件:连接300次,每次从表里读20条String,显示在网页上。最后显示执行时间。结果如下:无连接池:平均8-9秒有连接池:平均0.9-1.2秒结果显示有连接池比无连接池要快10倍左右。而且当访问连接很频繁时连接池的优势更明显。
连接池代码:
Context ctx = new InitialContext();
if(ctx == null ) throw new Exception("No Context");
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mailfriends");
if (ds != null) {
conn = ds.getConnection();
}
无连接池代码:
Class.forName(this.driver);
conn=DriverManager.getConnection(url,user,password);
一样的JSP执行页代码:
long a=0,b=0;
java.util.Date date=new java.util.Date();
a=date.getTime();
for (int i=0;i<300;i++)
{
try
{
Context initCtx = new InitialContext();
if(initCtx==null)
throw new Exception("没有匹配的环境");
Context ctx = (Context) initCtx.lookup("java:comp/env");
//获取连接池对象Object obj = (Object) ctx.lookup("jdbc/mailfriends");
//类型转换javax.sql.DataSource ds = (javax.sql.DataSource)obj;
if(ds==null)
throw new Exception("没有匹配数据库");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String strSql="select subject from plan"; //SQL,要保证数据表里面有记录。ResultSet rs=stmt.executeQuery(strSql);
while(rs.next())
{
out.println(rs.getString("subject"));
}
rs.close(); //关闭ResultSet
stmt.close(); //关闭Statement
conn.close(); //将连接放回到连接池}
catch(Exception ex)
{
ex.printStackTrace();
throw new SQLException("cannot get Connection pool."+ex);
}
java.util.Date date2=new java.util.Date();
b=date2.getTime();
out.println(date);
out.println(date2);
out.println(b-a);
}
%>