数据库连接池
数据库连接池简介
●数据库连接池是个容器,负责分配、管理数据库连接(Connection)
●它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
●释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
好处:
资源重用
提升系统相应速度
避免数据库连接遗漏
数据库连接池实现
●标准接口:DateSource
官方(SUM)提供的数据库连接池标准接口,由第三方组织实现此接口
功能:获取连接
Connection getConnection();
●常见的数据库连接池
DBCP
C3P0
Druid
●Druid(德鲁伊)
Druid连接池是阿里巴巴开源的数据库连接池项目
功能强大,性能优秀,是Java语言最好的数据库连接池之一
Druid使用步骤
1.导入jar包
2.定义配置文件
3.加载配置文件
4.获取连接池对象
5.获取数据库连接
代码实现:
public class DruidDemo {
public static void main(String[] args) throws Exception {
//1.导入jar包
//2.定义配置文件
//3.加载配置文件
Properties prop=new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5.获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
练习:完成商品品牌数据的增删改查操作
●查询:查询所有数据
@Test
public void testSelectAll() throws Exception {
//1.获取Connection
Properties prop=new Properties();
prop.load(new FileInputStream("src/druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接
Connection conn = dataSource.getConnection();
//2.定义sql语句
String sql="select * from tb_brand";
//3.获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//4.设置参数
//5.执行SQL
ResultSet rs = pstmt.executeQuery();
//6.处理结果 List<Brand>
Brand brand=null;
List<Brand> brands=new ArrayList<>();
while (rs.next()){
//获取数据
int id = rs.getInt("id");
String brandName = rs.getString("brand_name");
String companyName = rs.getString("company_name");
int ordered = rs.getInt("ordered");
String description = rs.getString("description");
int status = rs.getInt("status");
//封装Brand对象
brand = new Brand ();
brand.setId(id);
brand.setBrandName(brandName);
brand.setCompanyName(companyName);
brand.setOrdered(ordered);
brand.setDescription(description);
brand.setStatus(status);
//装载集合
brands.add(brand);
}
System.out.println(brands);
//7.资源关闭
rs.close();
pstmt.close();;
conn.close();
}
●添加数据
//添加数据
@Test
public void testAdd() throws Exception {
//接收用户提交的参数
String brandName="香飘飘";
String companyName="香飘飘";
int ordered=1;
String description="绕地球一圈";
int status=1;
//加载配置文件
Properties prop=new Properties();
prop.load(new FileInputStream("src/druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接
Connection conn = dataSource.getConnection();
//2.定义sql语句
String sql="insert into tb_brand(brand_name, company_name, ordered, description, status) values(?,?,?,?,?)";
//3.获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//4.设置参数
pstmt.setString(1,brandName);
pstmt.setString(2,companyName);
pstmt.setInt(3,ordered);
pstmt.setString(4,description);
pstmt.setInt(5,status);
//5.执行SQL
int count = pstmt.executeUpdate();//影响的函数
//处理结果
System.out.println(count>0);
//7.资源关闭
pstmt.close();;
conn.close();
}
●根据id修改
//根据id修改
@Test
public void testUpdate() throws Exception {
//接收用户提交的参数
String brandName="香飘飘";
String companyName="香飘飘";
int ordered=1000;
String description="绕地球三圈";
int status=1;
int id=4;
//加载配置文件
Properties prop=new Properties();
prop.load(new FileInputStream("src/druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接
Connection conn = dataSource.getConnection();
//2.定义sql语句
String sql="update tb_brand\n" +
"set brand_name=?,\n" +
" company_name=?,\n" +
" ordered=?,\n" +
" description=?,\n" +
" status=?\n" +
"where id=?;";
//3.获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//4.设置参数
pstmt.setString(1,brandName);
pstmt.setString(2,companyName);
pstmt.setInt(3,ordered);
pstmt.setString(4,description);
pstmt.setInt(5,status);
pstmt.setInt(6,id);
//5.执行SQL
int count = pstmt.executeUpdate();//影响的函数
//处理结果
System.out.println(count>0);
//7.资源关闭
pstmt.close();;
conn.close();
}
●根据id删除
//根据id删除
@Test
public void testDeleteById() throws Exception {
//接收参数
int id=4;
//加载配置文件
Properties prop=new Properties();
prop.load(new FileInputStream("src/druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接
Connection conn = dataSource.getConnection();
//2.定义sql语句
String sql="delete from tb_brand where id=?";
//3.获取pstmt对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//4.设置参数
pstmt.setInt(1,id);
//5.执行SQL
int count = pstmt.executeUpdate();//影响的函数
//处理结果
System.out.println(count>0);
//7.资源关闭
pstmt.close();;
conn.close();
}