传统的JDBC链接不节省资源;访问效率不搞笑
数据库连接池:是一个存放数据库链接的容器(集合)
当系统初始化后,容器会被创建,容器中会申请一些链接对象,当用户来访问数据库时,从容器中获取链接对象,用户访问完之后,会将链接对象规范给容器
好处:
节省资源
访问效率高
实现:
标准接口 JDK javax.sql下的 DataSource
1.方法:
获取链接:getConnection()
归还链接:Connection.close()如果链接对象getConnection()时从链接池中获取的,那么调用这个方法,则不会关闭数据库链接而是归还链接
一般我们不去实现DataSource,由数据库厂商来实现常用的两个技术:
1.C3P0:
2.Druid: 阿里巴巴提供的
C3P0:
1.导入包
需要导入三个个包:
JDBC包
mchange-commons-java-0.2.12.jar
c3p0-0.9.5.2.jar
2、定义配置文件:
c3p0.properties或者c3p0-config-xml(必须)
路径:定义类路径 (SRC下面)文件放在SRC下即可
3、创建核心对象 ComboPoolDataSoruce
4、获取链接:getConnection
package cn.study.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class C3P0Dmo1 {
public static void main(String[] args) throws SQLException {
//没有参数使用默认配置;传递参数指定配置文件里的 name=“属性值”; 就获取到相应的数据库ComboPooledDataSource
ComboPooledDataSource ds = new ComboPooledDataSource();
//获取链接对象
Connection conn = ds.getConnection();
String sql = "update account set balance =55000";
Statement statement = conn.createStatement();
statement.execute(sql);
//归还连接
conn.close();
}
}
······································································································
Druid:
步骤:
1.导入包
2.定义配置文件properties形式的(名称可是任意的)
3.加载配置文件
4.获取数据库链接池对象(通过工厂类获取) DruidDataSourceFactory
DruidDataSourceFactory.createDataSource()
5.获取链接getConnection
package cn.study.c3p0;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws IOException {
// 加载配置文件
Properties properties = new Properties();
InputStream resourceAsStream = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(resourceAsStream);
//获取链接池对象
try {
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
}