数据库-JDBC连接池

连接池的使用

连接池用于缓存连接!
当我们需要使用连接时, 可以不用再创建连接 ! 可以直接从连接池中获取连接.
当连接池中存在空闲连接时, 会将空闲连接给到程序使用.
当连接池中不存在空闲连接时, 且连接池未满时 , 则创建连接提供给程序使用 ,并在程序使用完毕后,
缓存连接.
当连接池中不存在空闲连接时, 且连接池已满时 , 则排队等候空闲连接的出现.
注意:
使用连接池中的连接对象操作数据库时, 操作完毕依然需要释放连接(调用close()).
连接池中的连接在设计时, 使用了动态代理设计模式+装饰者设计模式 . 我们调用它的close方法,
代理没有关闭这个连接, 而是将连接重新放入了池中.

DBCP连接池的使用步骤

1. 引入相关的jar文件
- dbcp.jar
- poll.jar
2. 将配置文件引入
3. 将配置文件, 转换为Properties对象
Properties ppt = new Properties();
ppt.load(配置文件的输入流);
4. 通过连接池的工厂类(BasicDataSourceFactory)的创建连接池的方法(createDataSource())
DataSource ds = BasicDataSourceFactory.createDataSource(ppt);
5. 从连接池中 获取连接对象
Connection conn = ds.getConnection();

德鲁伊连接池的使用步骤

1. 引入相关的jar文件
- druid-1.0.9.jar
2. 将配置文件引入
3. 将配置文件, 转换为Properties对象
Properties ppt = new Properties();
ppt.load(配置文件的输入流);
4. 通过连接池的工厂类(DruidDataSourceFactory)的创建连接池的方法(createDataSource())
DataSource ds = DruidDataSourceFactory.createDataSource(ppt);
5. 从连接池中 获取连接对象
Connection conn = ds.getConnection();

连接池工具类

  • Druid
public class DruidUtil{
	private static DataSource data = null;
	static {
	InputStream is =
	DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");
	Properties ppt = new Properties();
	try {
	ppt.load(is);
	data = DruidDataSourceFactory.createDataSource(ppt);
	} catch (Exception e) {
	e.printStackTrace();
	}
	}
	/**
	* 用于从DBCP连接池中 获取一个连接
	* @return DBCP连接池中的一个连接对象.
	*/
	public static Connection getConnection() {
	try {
	return data.getConnection();
	} catch (SQLException e) {
	e.printStackTrace();
	return null;
	}
	}
	/**
	* 用于释放连接 , 执行环境 , 结果集 等资源
	* @param conn 要释放的连接资源
	* @param state 要释放的执行环境资源
	* @param result 要释放的结果集资源
	*/
	public static void close(Connection conn,Statement state,ResultSet result) {
	if(result != null) {
	try {
	result.close();
	} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}
	}
	if(state != null) {
	try {
	state.close();
	} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}
	}
	if(conn != null) {
	try {
	conn.close();
	} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}
	}
	}
}
  • DBCP
public class DBCPUtil{
private static DataSource data = null;
static {
InputStream is =
DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties");
Properties ppt = new Properties();
try {
ppt.load(is);
data = BasicDataSourceFactory.createDataSource(ppt);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 用于从DBCP连接池中 获取一个连接
* @return DBCP连接池中的一个连接对象.
*/
public static Connection getConnection() {
try {
return data.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**
* 用于释放连接 , 执行环境 , 结果集 等资源
* @param conn 要释放的连接资源
* @param state 要释放的执行环境资源
* @param result 要释放的结果集资源
*/
public static void close(Connection conn,Statement state,ResultSet result) {
if(result != null) {
try {
result.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(state != null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

Properties 作为配置文件

Properties类 是Java中的Map集合的实现类.
.properties文件 用于通过文件描述一组键值对!
.properties文件 ,可以快速的转换为Properties类的对象.
文件中内容的格式:
文件内容都是字符串 , 键与值之间通过等号连接 , 多个键值对之间换行分割.
例如:
url=xxx
user=xxx
password=xxx
如何将文件 转换为 集合:
步骤:
1. 创建Properties对象
Properties ppt = new Properties();
2. 创建一个字节输入流 , 指向.properties文件
InputStream is = new FileInputStream("文件地址");
3. 将字节输入流, 传递给properties对象, 进行加载.
ppt.load(is);

案例

  • DBCP
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class Demo {
//    DBCP
    public static void main(String[] args) throws Exception {
        //1.    引入jar文件
        //2.    将配置文件 properties文件 放到src文件夹下
        //3.    将properties文件 转换为Properties对象
        Properties ppt = new Properties();
        InputStream is = Demo.class.getClassLoader().getResourceAsStream("dbcp.properties");
        ppt.load(is);
        //4.    通过连接池的工厂类, 创建连接池
        DataSource dataSource = BasicDataSourceFactory.createDataSource(ppt);
        //5.    从池中获取一个连接
        Connection conn = dataSource.getConnection();
        Statement state = conn.createStatement();
        state.execute("insert into person values('zhangsan','lisi')");
        state.close();
        conn.close();
    }
}
  • Druid
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Properties;

public class Demo {
//    Druid
    public static void main(String[] args) throws Exception {
        //1.    引入jar文件
        //2.    将配置文件 properties文件 放到src文件夹下
        //3.    将properties文件 转换为Properties对象
        Properties ppt = new Properties();
        InputStream is = Demo.class.getClassLoader().getResourceAsStream("druid.properties");
        ppt.load(is);
        //4.    通过连接池的工厂类, 创建连接池
        DataSource dataSource = DruidDataSourceFactory.createDataSource(ppt);
        //5.    从池中获取一个连接
        Connection conn = dataSource.getConnection();
        Statement state = conn.createStatement();
        state.execute("insert into person values('zhangsan','lisi')");
        state.close();
        conn.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值