实现SQLServer、MySQL和oracle数据库连接池

本文详细介绍了如何在Tomcat环境中配置针对SQLServer、MySQL和Oracle数据库的连接池,包括必要的配置步骤和注意事项,确保高效稳定地管理数据库连接。
javax.sql.DataSource接口
tomcat中使用JNDI实现连接池
使用DBCP实现数据库连接池
使用C3P0实现数据库连接池
不使用连接池的数据连接
Class.forName(driverName);
Connectionconn=DriverManager.getConnection(url,user,pwd);
使用Connection对象进行数据库的访问
接口DataSource
javax.sql.DataSource接口负责建立与数据库的连接
javax.sql.DataSource接口用来取代DriverManager来获取Connection
通过DataSource获得的Connection速度很快
通过DataSource获得的Connection都是已经被包裹过的,它的close方法已经被修改过
使用JNDI(JavaNaming and Directory Interface)配置数据库连接池

tomcat中的配置

1.以下配置均基于tomcat5.5以上版本
2.找到tomcat目录中的conf文件夹中的context.xml文件
3.<Context>节点中添加<Resource>信息
<Resource name="jdbc/cms" auth="Container"	
type="javax.sql.DataSource"	
maxActive="100" maxIdle="30" maxWait="10000"	
username="sa" password="sa"	
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"	
url="jdbc:sqlserver://localhost:1433;databasename=数据库名称"/>
4.tomcatlib目录下添加JDBC所用驱动包
  以上步骤注册了一个名字为jdbc/cmsDataSource
  在应用程序的web.xml中添加以下内容
<resource-ref>
   <description>说明文字</description>
   <res-ref-name>jdbc/cms</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>
  web.xml中也可以不进行配置就可以使用
从数据库连接池中得到连接对象
//使用JNDI和数据源 要引入的包
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class DBConnection {
     //通过Context、DataSource获取Connection
     public static Connection getConn(){
         Connection con = null ;
              try {
	   Context ic=new InitialContext();
	   //分两部分java:comp/env为JavaEE默认路径jdbc/cms为DataSource名称
           DataSource dataSource=(DataSource) ic.lookup("java:comp/env/jdbc/cms");
	   con = dataSource.getConnection();
	} catch (Exception e) {
	   e.printStackTrace();
	}
	return con ;
      }
} 
JNDI常见错误
1.org.apache.tomcat.dbcp.dbcp.SQLNestedException:Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
       没有将jdbc驱动包放入tomcat的lib下或网站的lib下
2.javax.naming.NameNotFoundException:Name xxx is not bound in this Context
       检查代码中用于获取的jndi名称(xxx)是否存在
       注意在tomcat中用于获取的jndi名称必须以java:comp/env开头
BaseDao里边注释掉的是不使用数据库
//    private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
//    private static final String URL="jdbc:sqlserver://localhost:1433;DatabaseName=call";
//    //数据库用户名密码
//    private static final String USERNAME="sa";
//    private static final String PASSWORD="sa";
//    
    //创建connection对象
    protected Connection conn;
    //创建PreparedStatement对象
    protected  PreparedStatement pstmt;
    //创建ResultSet对象
    protected ResultSet rs;
    
    protected void getConnection() throws SQLException{
    	//获取连接池对象
		DataSource dataSource=DBConnection.getDataSource();
		//获取连接
		this.conn=dataSource.getConnection();
//    	try {
//    		//注册驱动
//			Class.forName(DRIVER);
//			//连接
//			conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
//			
//		} catch (ClassNotFoundException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}catch(SQLException e){
//			e.printStackTrace();
//		}
    }
使用DBCP配置数据库连接池

   1.www.apache.org官方网站下载dbcp需要的jar包
          包括以下jar包
               commons-dbcp-1.4.jar
               commons-pool-1.5.5.jar

2.将jdbc驱动,上述两个jar文件同时放入WEB-INF目录下的lib目下
3.在网站下新建properties文件,名称随意,扩展名必须为properties
4.可以放在WEB-INF目录或和数据访问类相同的目录下
      properties文件中内容如下所示
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;databasename=movie//movie数据库名称
username=sa
password=sa
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
使用DBCP得到数据库连接
/**
 * 单例模式生成DataSource对象
 * @author Administrator
 *
 */
public class DataSourceUtil {
	private static DataSource dataSource;
	static{
		Properties p=new Properties();
		InputStream is=DataSourceUtil.class.getResourceAsStream("/dbcp.properties");//路径
		try {
			p.load(is);
			dataSource=BasicDataSourceFactory.createDataSource(p);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private DataSourceUtil(){	
	}
	public static DataSource getDataSource(){
		return dataSource;
	}
}
使用C3P0配置数据库连接池
   1.从www.sourceforge.net上下载c3p0数据库连接池所需jar文件
              将下载的文件c3p0-0.9.1.2.jar和jdbc驱动jar文件拷贝到网站WEB-INF目录下的lib目录下
   2.src目录下新建c3p0.properties文件,名称必须为此
     c3p0.properties的内容如下:
#驱动名称
c3p0.driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver
#连接字符串
c3p0.jdbcUrl=jdbc:sqlserver://localhost:1433;databasename=movie
#连接数据库的用户名称
c3p0.user=sa
#连接数据库的密码
c3p0.password=sa
#连接池中最少的连接数目
c3p0.minPoolSize=10
#连接池中最大的连接数据
c3p0.maxPoolSize=100
#连接池初始化时的连接数据
c3p0.initialPoolSize=10
#连接池中连接最大空闲时间(秒),0为无限
c3p0.maxIdleTime=60
使用C3P0得到数据库连接
public class DataSourceUtil {
	private static DataSource dataSource;
	static{
		dataSource=new ComboPooledDataSource();
		/*
		//ComboPooledDataSource cpds=new ComboPooledDataSource();
		//try {
		//	cpds.setDriverClass("");
		//	cpds.setInitialPoolSize(10);
		//} catch (PropertyVetoException e) {
		//	// TODO Auto-generated catch block
		//	e.printStackTrace();
		//}*/
	    //可以不使用参数配置,而用其一系列的set方法设置连接池参数		
	}	
	private DataSourceUtil(){	
	}
	public static DataSource getDataSource(){
		return dataSource;
	}
}
以上是三种实现连接池的方法
tomcatJNDI的配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值