实现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. 节点中添加 信息
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. tomcat lib 目录下添加 JDBC 所用驱动包
  以上步骤注册了一个名字为 jdbc / cms DataSource
  在应用程序的 web.xml 中添加以下内容

   说明文字
   jdbc/cms
   javax.sql.DataSource
   Container

   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;
	}
}
以上是三种实现连接池的方法
tomcat JNDI 的配

你可能感兴趣的:(实现SQLServer、MySQL和oracle数据库连接池)