先了解池化技术
一、池化技术的产生前提
首先我们需要了解,程序的运行,本质上是占用系统的资源,为了优化资源的使用,演变出来了池化技术,比如我们经常见到的线程池、JDBC连接池、内存池等等
二、一句话概括池化技术
事先准备好一些资源,有人要用就来我这里拿,用完之后再还给我
通常我们可以设置池子的默认大小或者可以设置池子的最大并发数(max)
下载commons-dbcp-1.4.jar包
1、进入官网
Apache Commons – Apache Commons
2、进入releases
3、选择DBCP
4、
5、
6、选择对应的版本,下载zip压缩包
7、将解压后的jar包放进指定的目录下即可
IDEA集成DBCP数据源
一、将JDBC_dbcp抽取成工具类
public class JdbcUtils_DBCP {
//将我们用到的变量提升一下作用域
public static DataSource dataSource = null;
static {
try {
// 1、通过工具类,获取他自己的反射对象,然后获取反射对象的类加载器,调用类加载器的获取资源的方法
InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcp.properties");
//2、创建读取配置文件的对象
Properties properties = new Properties();
//3、调用读取配置文件的方法
properties.load(in);
//创建数据源 工厂模式,返回一个数据源
dataSource = BasicDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//连接数据库方法
public static Connection getConnection() throws SQLException {
//连接数据库,数据源中自带连接方法
return dataSource.getConnection();
}
//释放资源方法
public static void release(Connection conn, Statement sta, ResultSet rs) throws SQLException {
if (rs != null) {
rs.close();
}
if (sta != null) {
sta.close();
}
if (conn != null) {
conn.close();
}
}
}
二、执行SQL的代码其实和原生代码相差无几,差别就在于连接数据库通过数据源dataSources连接的
public class TestDbcp {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement sta = null;
ResultSet rs = null;
try {
//连接数据库,只有这个地方和原生的代码不用
conn = JdbcUtils_DBCP.getConnection();
//开启事务
conn.setAutoCommit(false);
//编写 预编译SQL
String sql = "update users set `NAME` = ? where id = ?";
//预编译SQL
sta = conn.prepareStatement(sql);
//传入完整的SQL,执行SQL
sta.setString(1,"张大大");
sta.setInt(2,3);
int i = sta.executeUpdate();
//事务执行完毕,提交
conn.commit();
System.out.println(i + "行数据被修改");
} catch (SQLException throwables) {
try {
conn.rollback();//事务执行不成功,回滚
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
} finally {
try {
JdbcUtils_DBCP.release(conn,sta,null);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}