java学习笔记之数据库连接池(DBCP和C3P0)
程序员文章站
2022-06-24 09:28:06
数据库连接池(DBCP和C3P0) 一.数据库连接池的概念 数据库连接池可以理解为是存放多个数据库连接的集合。 作用;解决建立数据库连接耗费很多资源和时间问题,提高性能 Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用 ......
数据库连接池(DBCP和C3P0)
一.数据库连接池的概念
数据库连接池可以理解为是存放多个数据库连接的集合。
作用;解决建立数据库连接耗费很多资源和时间问题,提高性能
Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!
连接池图解:
1.简单介绍:
dbcp是apache组织的开源的连接池
2.使用步骤:
①添加jar包 commons-dbcp-1.4.jar commons-pool-1.5.6.jar
②,编写配置文件(四大信息)
配置文件名以 .properties结尾
最好放在src目录下
配置文件信息如下:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/day05db username=root password=root
③编写连接池工具类
1 import java.sql.Connection; 2 import java.sql.ResultSet; 3 import java.sql.SQLException; 4 import java.sql.Statement; 5 import java.util.Properties; 6 7 import javax.sql.DataSource; 8 9 import org.apache.commons.dbcp.BasicDataSourceFactory; 10 /* 11 * javax.sql.DataSource接口 12 * DBCP连接池实现类: 13 * BasicDataSource 14 * BasicDataSourceFactory 15 * 16 * 连接池的创建步骤 : 17 * 1:创建一个空的连接池 18 * BasicDataSource dataSource = new BasicDataSource(); 19 * 2:给这个连接池设置四大信息--->连接池会自动的向池子中存放连接 (默认一般是10个) 20 * dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 21 * dataSource.setUrl("jdbc:mysql://localhost:3306/day04db"); 22 * dataSource.setUserName("root"); 23 * dataSource.setPassword("123"); 24 * 25 * 3:封装一个方法,对外提供一个连接池中连接 26 * getConntion(); 27 */ 28 public class MyDBCPUtils { 29 private static DataSource dataSource=null; 30 //创建一个空的连接池 31 static{ 32 Properties properties=new Properties(); 33 try { 34 35 properties.load(MyDBCPUtils.class.getClassLoader().getResourceAsStream("dbcp.properties")); 36 /*MyDBCPUtils.class.getClassLoader().getResourceAsStream("dbcp.properties") 37 * 方法会自动的去bin目录中找配置文件夹 38 */ 39 /* 40 * 该方法会做两件事情: 41 * 1:自动从Properties集合中获取四大信息 42 * 2: 创建一个有连接的连接池 43 */ 44 dataSource=BasicDataSourceFactory.createDataSource(properties); 45 } catch (Exception e) { 46 // TODO Auto-generated catch block 47 e.printStackTrace(); 48 } 49 50 } 51 /** 52 * 创建一个静态方法 ,可以让外界获取连接对象 53 * @return Connection 54 * @throws Exception 55 */ 56 public static Connection getConnection() throws Exception{ 57 return dataSource.getConnection(); 58 } 59 /** 60 * 61 * @param rs 结果集对象,没有写null 62 * @param stat sql执行平台对象 63 * @param conn 数据库连接对象 64 */ 65 public static void closeAll(ResultSet rs,Statement stat,Connection conn){ 66 67 if(rs!=null){ 68 try { 69 rs.close(); 70 } catch (SQLException e) { 71 // TODO Auto-generated catch block 72 e.printStackTrace(); 73 } 74 } 75 if(stat!=null){ 76 try { 77 stat.close(); 78 } catch (SQLException e) { 79 // TODO Auto-generated catch block 80 e.printStackTrace(); 81 } 82 } 83 84 //这里这个close不是关流释放资源,而是重写方法,将连接放回连接池 85 if(conn!=null){ 86 try { 87 conn.close(); 88 } catch (SQLException e) { 89 // TODO Auto-generated catch block 90 e.printStackTrace(); 91 } 92 } 93 } 94 95 }
④使用编写的工具类(简单demo)
1 import java.sql.Connection; 2 import java.sql.PreparedStatement; 3 import java.sql.ResultSet; 4 5 public class Test01 { 6 public static void main(String[] args)throws Exception{ 7 //获得连接 8 Connection conn = MyDBCPUtils.getConnection(); 9 10 //获得sql语句的执行平台 11 PreparedStatement stat = conn.prepareStatement("select * from student"); 12 //获得结果集 13 ResultSet result = stat.executeQuery(); 14 //处理结果集 15 16 while(result.next()){ 17 System.out.println(result.getInt("stu_id")); 18 } 19 //释放资源 20 MyDBCPUtils.closeAll(result, stat, conn); 21 22 } 23 24 }
三.C3P0连接池
1.简单介绍
C3P0开源免费的连接池!目前使用它的开源项目有:Spring、Hibernate等。使用第三方工具需要导入jar包,c3p0使用时还需要添加配置文件 c3p0-config.xml
2使用步骤:
①:导入jar包
②:编写配置文件
文件类型:xml
文件名必须是 c3p0-config.xml,放在src中
简单的文件demo:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <!-- 4 dataSource.setDriverClass("com.mysql.jdbc.Driver"); 5 dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day05db"); 6 dataSource.setUser("root"); 7 dataSource.setPassword("123"); 8 9 1:获取name属性:driverClass 10 2:进行字符串拼接:setDriverClass 11 3: 反射setDriverClass() 12 4: 调用setDriverClass()给变量赋值:com.mysql.jdbc.Driver 13 --> 14 <c3p0-config> 15 <default-config> 16 <property name="driverClass">com.mysql.jdbc.Driver</property> 17 <property name="jdbcUrl">jdbc:mysql://localhost:3306/day05db</property> 18 <property name="user">root</property> 19 <property name="password">123</property> 20 </default-config> 21 </c3p0-config>
③编写连接池使用工具类
1 /* 2 * javax.sql.DataSource接口 3 * 实现类:ComboPooledDataSource 4 * 5 * 创建连接池: 6 * 1:创建一个空的连接池 7 * ComboPooledDataSource dataSource = new ComboPooledDataSource(); 8 * 2: 设置四大信息--->连接池会自动的存放连接 9 * dataSource.setXxx(""); 10 * dataSource.setXxx(""); 11 * dataSource.setXxx(""); 12 * dataSource.setXxx(""); 13 */ 14 15 public class MyC3P0Utils { 16 /* 17 * 1:该对象在创建的时候会自动的检测是否有c3p0-config.xml 18 * 2: 如果没有c3p0-config.xml 19 * 你需要手动的设置四大信息 20 * 3: 如果有c3p0-config.xml 21 * 1:该对象在创建的时候会自动的解析xml文件 22 * 2:获取四大信息 23 * 3: 创建连接池,并向连接池中存放连接池 24 */ 25 private static DataSource dataSource = new ComboPooledDataSource(); 26 27 //封装一个方法,让别人能够获取连接池中的连接 28 public static Connection getConnetion()throws Exception{ 29 30 return dataSource.getConnection(); 31 } 32 33 public static void closeAll(ResultSet rs, Statement stat, Connection conn) { 34 if (rs != null) { 35 try { 36 rs.close(); 37 } catch (SQLException e) { 38 e.printStackTrace(); 39 } 40 } 41 if (stat != null) { 42 try { 43 stat.close(); 44 } catch (SQLException e) { 45 e.printStackTrace(); 46 } 47 } 48 if (conn != null) { 49 try { 50 conn.close();// 连接池已经重写类该方法,该方法是将连接重新放回到连接池 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 } 54 } 55 } 56 }
④使用工具类
1 import java.sql.Connection; 2 import java.sql.PreparedStatement; 3 4 public class TestDemo01 { 5 public static void main(String[] args) throws Exception { 6 //1:获取连接 7 Connection conn = MyC3P0Utils.getConnetion(); 8 //2:执行sql 9 PreparedStatement stat = conn.prepareStatement("delete from category where cid = ?"); 10 stat.setObject(1, 2); 11 int rows = stat.executeUpdate(); 12 13 //3:处理结果 14 if(rows > 0){ 15 System.out.println("删除成功"); 16 }else{ 17 System.out.println("删除失败"); 18 } 19 20 //4: 释放资源 21 MyC3P0Utils.closeAll(null, stat, conn); 22 } 23 }
上一篇: oracle 数据库
下一篇: c/c++线性循环队列
推荐阅读
-
Java学习笔记 DbUtils数据库查询和log4j日志输出 使用
-
Java学习笔记 DbUtils数据库查询和log4j日志输出 使用
-
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
-
荐 Java——数据库编程JDBC之数据库连接池技术(C3P0与Druid,提供了Druid的工具类)
-
Java框架数据库连接池比较(c3p0,dbcp和proxool)
-
java学习笔记之数据库连接池(DBCP和C3P0)
-
Java之注解和反射学习笔记十二 —— 获取类的运行时结构
-
PHP学习笔记PHP脚本和JAVA连接mysql数据库,学习笔记mysql
-
【数据库学习笔记】(4)JDBC数据源和连接池
-
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库