- 数据库连接池
在JDBC编程中,每次创建和断开Connection对象都需要消耗一定的时间和IO资源,频繁的创建和断开连接势必会影响数据库的访问效率,甚至导致数据库服务器宕机。
数据库连接池负责分配、管理和释放数据库连接对象,当应用程序需要访问数据库是并不是创建Connection,而是从连接池“申请”一个Connection对象,使用完毕后,将该数据库连接池对象返回到连接池中,供其他线程使用。这样可以减少创建和断开连接对象的次数,提高数据库的访问效率。 - DBCP数据源
1.jar包
Commons-dbcp.jar 连接池的实现
Commons-pool.jar 连接池实现依赖的库
2.配置文件
//属性资源文件中配置的参数
//数据库驱动
driverClassName = com.mysql.jdbc.Driver
//数据库地址
url = jdbc:mysql://localhost:3306/copy?useUnicode=true&characterEncoding=utf-8
username = root
password =root
initialSize = 3
minSize = 3
maxSize = 6
//最大空闲时间,单位秒
maxIdle =2
3.dbcp数据源工具类:
package com.offcn.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import javax.swing.plaf.basic.BasicEditorPaneUI;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBCPConnection {
private static DataSource ds = null;
static{
try {
//创建属性对象
Properties prop = new Properties();
//类加载器的方式来加载属性文件
InputStream is = DBCPConnection.class.getClassLoader().getResourceAsStream("dbcp.properties");
//对properties对象数据的赋值
prop.load(is);
//通过工厂模式,创建DataSource对象
ds = BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//从连接池中申请一个连接对象
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
//将连接对象还给数据库连接池
public static void closeConnection(Connection con) throws SQLException{
if(con != null){
con.close();
}
}
}
- C3P0数据源
1.jar包
c3p0-0.9.5.2. jar
mchange-comons-java-0.2.11 jar
2.配置文件
c3p0.driverClass = com.mysql.jdbc.Driver
c3p0.jdbcUrl = jdbc:mysql://localhost:3306/copy?useUnicode=true&characterEncoding=utf-8
c3p0.user = root
c3p0.password =root
//连接池初始化时创建的连接数
c3p0.initialPoolSize = 3
//最小连接数
c3p0.minPoolSize = 3
c3p0.maxPoolSize = 6
//最大空闲时间
c3p0.maxIdleTime =2
3.c3p0数据源工具类
package com.offcn.util;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Connection {
//数据库连接池对象
private static DataSource ds = null;
static{
ds = new ComboPooledDataSource();//创建dataSource的实例
}
//向数据库连接池申请connection连接对象
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
//将连接对象还给数据库连接池
public static void closeConnection(Connection con) throws SQLException{
if(con != null){
con.close();
}
}
}
- Tomcat内置数据源
1.jar包
默认存在内置数据源的jar包
2.配置文件
配置在tomcat安装目录下,conf/context.xml文件中,所有的项目都可以使用。
在当前应用的META-INF中创建context.xml配置,只能供本项目使用。
//配置在当前项目
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/xuhui"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/copy?useUnicode=true&characterEncoding=utf-8"
username="root"
password="root"
initialSize = "3"
minIdle = "1"
maxActive = "6"
maxIdle ="2"
>
</Resource>
</Context>
3.Tomcat内置数据源工具类
package com.offcn.util;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class TomactDBConnection {
//代表jndi容器
private static DataSource ds = null;
private static Context cxt = null;
static{
try {
cxt = new InitialContext();
//获取连接关键,基于jndi技术获得到服务器数据源
ds=(DataSource) cxt.lookup("java:/comp/env/jdbc/xuhui");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
//将连接对象还给数据库连接池
public static void closeConnection(Connection con) throws SQLException{
if(con != null){
con.close();
}
}
}
- JNDI技术
Java Naming and Directory Interface Java命名和目录接口
把Java对象放在一个容器中,并为容器中的Java对象命名,以后程序想获得Java对象,只需通过名称检索即可。