数据库连接池
1.基本概念
*概念:其实就是一个容器 (集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象, 当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
*好处:
1.节约资源
2.用户访问高效
1.标准接口: Datasource
javax.sql包下的
1.方法:
*获取连接: getConnection()
*归还连接: Connection.close()。
*如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了,而是归还连接。
2. 一般我们不去实现它,有数据库厂商来实现
3. C3P0 :数据库连接池技术
4. Druid :数据库连接池实现技术,由阿里巴巴提供的
2.C3p0
基本使用方法:
*步骤:
1.导入jar包(两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
*不要忘记导入数据库驱动jar包
2.定义配置文件:
*名称: c3p0.properties或者c3pθ-config.xml
*路径:直接将文件放在src目录下即可。
3.创建核心对象数据库连接池对象ComboPooledDataSource
4.获取连接: getConnection
3.Druid
Druid:数据库连接池技术,由阿里巴巴提供的
*步骤:
1.导入jar包 druid-1.2.6.jar
2.定义配置文件
*是properties形式的
*可以叫任意名称,可以放在任意目录下
3.加载配置文件。Properties
4.获取数据库连接池对象:通过工厂类来获取 Druid DataSourceFactory
5.获取连接:getConnection()
*定义工具类
1.定义一个工具类 JDBCUtils
2.提供静态代码块加载配置文件,初始化连接池对象。
3.提供方法
3.1.获取连接方法:通过数据库连接池获取连接
3.2.释放资源
3.3.获取连接池的方法
*练习:
public void Test() throws Exception {
//1.导入jar包 druid-1.2.6.jar
//2.定义配置文件properties
//3.加载配置文件
Properties prs =new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
prs.load(is);
//4.获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(prs);
//5.获取连接
Connection conn = ds.getConnection();
System.out.println(conn);
}
3.1Druid工具类
/**
* Druid 工具类
*/
public class JDBCUtils {
//1.定义成员变量 DataSource
private static DataSource ds;
static {
try {
//1.加载配置文件
Properties pro = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.获取dataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 释放资源
*/
public static void close(Statement stmt,Connection conn){
/* if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}*/
close(null,stmt,conn);
}
public static void close(ResultSet rs, Statement stmt, Connection conn){
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取连接池的方法
*/
public static DataSource getDataSource(){
return ds;
}
}
3.2Druid工具类测试
/**
* 使用新的工具类
*/
public class DruidDemo2 {
@Test
public void Test(){
/**
* 完成添加记录
*/
Connection connection =null;
PreparedStatement pstmt =null;
//1.获取连接
try {
connection = JDBCUtils.getConnection();
//2.定义sql
String sql ="insert into user values(null,?,?)";
//3.获取pstmt对象
pstmt = connection.prepareStatement(sql);
//给问好赋值
pstmt.setString(1,"wangwu");
pstmt.setInt(2,789);
//执行Sql
int i = pstmt.executeUpdate();
System.out.println(i);
} catch (SQLException e) {
e.printStackTrace();
}finally {
//释放资源
JDBCUtils.close(pstmt,connection);
}
}
}

浙公网安备 33010602011771号