当前位置:网站首页>开源数据库连接池的使用及其工具类
开源数据库连接池的使用及其工具类
2022-07-29 15:03:00 【汤键.】
目录
C3P0数据库连接池的使用步骤
- 1.导入jar包
- 2.导入配置文件到src目录下
- 3.创建C3P0连接池对象
- 4.获取数据库连接进行使用
- 注意:
- C3P0的配置文件会自动加载,但是必须叫c3p0-config.xml或c3p0-config.properties
C3P0数据库连接池实例演示(包含配置信息)
- 具体url和数据库帐号密码需自行在配置文件中修改
<c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/dp1</property> <property name="user">root</property> <property name="password">109923</property> <!-- 连接池参数 --> <!-- 初始连接数 --> <property name="initialPoolSize">5</property> <!-- 最大连接数 --> <property name="maxPoolSize">10</property> <!-- 最大等待时间 --> <property name="checkoutTimeout">3000</property> </default-config> <!-- 创建对象传参为otherc3p0时读取下面的配置信息 --> <named-config name="otherc3p0"> <!-- 连接参数 --> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/dp1</property> <property name="user">root</property> <property name="password">109923</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">8</property> <property name="checkoutTimeout">1000</property> </named-config> </c3p0-config>
package demo02.c3p0demo; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class c3p0Test1 { public static void main(String[] args) throws Exception{ //1.创建c3p0的数据库连接池对象 DataSource dataSource = new ComboPooledDataSource(); //2.通过连接池对象获取数据库连接 Connection con = dataSource.getConnection(); //3.查询学生表的全部信息 String sql = "SELECT * FROM student"; PreparedStatement pst = con.prepareStatement(sql); //4.执行sql语句,接收结果集 ResultSet rs = pst.executeQuery(); //5.处理结果集 while(rs.next()){ System.out.println(rs.getInt("sid")+"\t"+rs.getString("name")+"\t"+rs.getInt("age")+"\t"+rs.getDate("birthday")); } //6.释放资源 rs.close(); pst.close(); con.close();//用完以后,进行归还 } }
Druid数据库连接池的使用步骤
- 1.导入jar包
- 2.编写配置文件,放到src目录下
- 3.通过Properties集合加载配置文件
- 4.通过Druid连接池工厂类获取数据库连接池对象
- 5.获取数据库连接进行使用
- 注意:
- Druid不会自动加载配置文件,需要我们手动加载,但是文件的名称可以自定义
Druid数据库连接池实例演示(包含配置信息)
driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/dp1 username=root password=109923 initialSize=5 maxActive=10 maxWait=3000
package demo02.druiddemo; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Properties; public class druidTest { public static void main(String[] args) throws Exception{ //获取配置文件的流对象 InputStream is = druidTest.class.getClassLoader().getResourceAsStream("druid.properties"); //1.通过Properties集合加载配置文件 Properties prop = new Properties(); prop.load(is); //2.通过Druid连接池工厂类获取数据库连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //3.通过连接池对象获取数据库连接进行使用 Connection con = dataSource.getConnection(); //4.查询学生表的全部信息 String sql = "SELECT * FROM student"; PreparedStatement pst = con.prepareStatement(sql); //5.执行sql语句,接收结果集 ResultSet rs = pst.executeQuery(); //6.处理结果集 while(rs.next()){ System.out.println(rs.getInt("sid")+"\t"+rs.getString("name")+"\t"+rs.getInt("age")+"\t"+rs.getDate("birthday")); } //6.释放资源 rs.close(); pst.close(); con.close();//用完以后,进行归还 } }
连接池的工具类
package demo02.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class DataSourceUtils { //1.私有构造方法 private DataSourceUtils(){} //2.声明数据源变量 private static DataSource dataSource; //3.提供静态代码块,完成配置文件的加载 static{ try { //完成配置文件的加载 InputStream is = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties"); Properties prop = new Properties(); prop.load(is); //获取数据库连接池对象 dataSource = DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } //4.提供一个获取数据库连接的方法 public static Connection getConnection(){ Connection con = null; try { con = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return con; } //5.提供一个获取数据库连接池对象的方法 public static DataSource getDataSource(){ return dataSource; } //6.释放资源 public static void close(Connection con, Statement stat, ResultSet rs) { if(con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if(rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Connection con, Statement stat) { if(con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
package demo02.druiddemo; import demo02.utils.DataSourceUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class druidTest2 { public static void main(String[] args) throws Exception{ //1.通过连接池工具类获取一个数据库连接 Connection con = DataSourceUtils.getConnection(); //2.查询学生表的全部信息 String sql = "SELECT * FROM student"; PreparedStatement pst = con.prepareStatement(sql); //3.执行sql语句,接收结果集 ResultSet rs = pst.executeQuery(); //4.处理结果集 while(rs.next()){ System.out.println(rs.getInt("sid")+"\t"+rs.getString("name")+"\t"+rs.getInt("age")+"\t"+rs.getDate("birthday")); } //5.释放资源 DataSourceUtils.close(con,pst,rs); } }
边栏推荐
- See you in shenzhen!Cloud native to accelerate the application building special: see cloud native FinOps, SRE, high-performance computing scenario best practices
- Qt学习第一天
- File management: the physical structure of files
- 详解微处理器CPU的系统结构
- 突破性能天花板!亚信数据库支撑 10 多亿用户,峰值每秒百万交易
- 文件管理:文件的逻辑结构
- C语言 5:bool类型,关系表达式,逻辑表达式,分支语句,函数调用机制,break,continue,goto,return/exit跳转语句
- Immediate experience with CTS - | D further promotion application equipment compatibility
- You need to know about the digital transformation of eight guiding principles
- qt vs2015中无法打开源文件“QtWidgets”的解决方案
猜你喜欢
ES6 从入门到精通 # 10:Set 集合数据类型
自定义fingerprint特征
Why does APP use the JSON protocol to interact with the server: serialization related knowledge
Qt实战 | 如何获取USB设备信息?
微服务实战|集中配置中心Config非对称加密与安全管理
这个保护数据隐私的赛道,人人都想插一脚,互联网大厂挤破头,连甲方都下场自研了...
【GoLang】同步锁
极市直播丨严彬-Unicorn:走向目标跟踪的大一统(ECCV2022 Oral)
网络知识大集合(最详细)与网络通信过程
BGP联邦实验
随机推荐
多线程顺序运行的 4 种方法,面试随便问!
回放线上流量利器-GoReplay
令人难以置信的DeepMind数据库现在包括了科学界已知的几乎所有蛋白质
Google Play 政策更新 | 2022 年 7 月
展讯模块读写IMEI
BGP federation experiment
突破性能天花板!亚信数据库支撑 10 多亿用户,峰值每秒百万交易
Principles Of Mathematical Analysis, Third Edition免费下载地址
苹果涉险过关,全靠iPhone 13
【yolov7系列二】正负样本分配策略
53 LeetCode 】 【. Most architectural array and
Guangzhou fire: high temperature weather frequent fire fire safety should not be ignored
Mysql数据库及表的建立
求连续90日每日的用户留存率 -- 全网唯一
JUL 学习
Flink SQL Hudi 实战
DevOps的未来趋势
【LeetCode】53. 最大子数组和
【LeetCode】1. 两数之和
双线机房、多线机房、BGP机房的关系和对比