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.在tomcat的lib目录下添加JDBC所用驱动包
以上步骤注册了一个名字为jdbc/cms的DataSource
在应用程序的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.jar2.将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环境中配置针对SQLServer、MySQL和Oracle数据库的连接池,包括必要的配置步骤和注意事项,确保高效稳定地管理数据库连接。
437

被折叠的 条评论
为什么被折叠?



