之前连接数据库的方法分为两步,1加载驱动,2得到连接。这种方式在多用户操作时显得效率低下
今天我们用数据库连接池的方式使servlet应用连接数据库
所谓数据连接池,我的理解就是:一个池里放好了几根已经和数据库连好的线,用户一进到池子里,发现空闲的连接线,就可以直接插线连接上数据库,而当用户发现池子里的线都被使用时,就在池内等待。这种方式避免了来一个用户加载一次数据库连接驱动,大大地提高了效率
我的环境--tomcat7+sql server 2012
配置如下
找到tomcat-conf下的server.xml文件
将代码
<Context path="/RevenWebsite" docBase="e:\RevenWebsite"
reloadable="true" crossContext="true" workDir="">
<Resource name="jdbc/RevenWebsite"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="123456"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=rvdb"/>
</Context>
插入Host标签内(具体数据自己修改)。
注意:如果你想在你的server.xml文件中添加中文注释而又不想影响tomcat启动的话,就得引用国标字体
即在文件首行添加
<?xml version="1.0" encoding="gb2312"?>
修改完毕后别了对ConnDB文件的getConn()方法进行修改
//从数据库中得到连接
package com.jxust.reven;
import java.sql.*;
//使用数据源时需要引用的包
import javax.sql.*;
import javax.naming.*;
public class ConnDB
{
private Connection ct = null;
public Connection getConn()
{
/*传统驱动连接数据库方式
try
{
//1加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2得到连接
ct=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=rvdb","sa","123456");
}
catch(Exception ex)
{
ex.printStackTrace();
}
return ct;
*/
//数据源方式
try
{
//创建一个上下文环境
Context con=new javax.naming.InitialContext();
//通过con得到数据源
DataSource ds=(DataSource)con.lookup("java:comp/env/jdbc/RevenWebsite");
ct=ds.getConnection();
System.out.println("数据源连接");
}
catch(Exception ex)
{
ex.printStackTrace();
}
return ct;
}
}
最后在自己站点的WEB-INF下的web.xml文件中添加代码
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/RevenWebsite</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
暂时不知该步骤的意义,因为不做好像也能完成连接