当前位置:网站首页>连接池快速入门
连接池快速入门
2022-07-26 19:45:00 【汤键.】
目录
数据库连接的背景
- 数据库连接是一种关键的、有限的、昂贵的资源
- 这一点在多用户的网页应用程序中体现得尤为突出
- 对数据库连接的管理能显著影响到整个应用程序的性能指标,数据库连接池正是针对这个问题提出来的
- 如:在用户访问网站时不断创建连接不断销毁连接,那么这个效率就不是很高
数据库连接池
- 数据库连接池负责分配,管理和释放数据库连接
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
- 这项技术能明显提高对数据库操作的性能
- 简要过程:
- 就是提前准备一个容器,这个容器就是数据库的连接池,在容器中,提前准备好了一些数据库连接
- 这时来了请求后,就从连接池中拿一个连接对象进行使用
- 使用完成以后不关掉,而是归还到连接池当中,达到重复使用的效果
- 所谓的池,就是搞一个容器,这个容器里边保存的就是很多个数据库连接对象
DataSource
- DataSource接口概述
- javax.sql.DataSourse接口:数据源(数据库连接池)
- Java官方提供的数据库连接池规范(接口)
- 如果想完成数据库连接池技术,就必须实现DataSource接口
- 核心功能:
- 获取数据库连接对象:
- Connection getConnection();
自定义数据库连接池
- 1.定义一个类,实现DataSource接口
- 2.定义一个容器,用于保存多个Connection连接对象
- 3.定义静态代码块,通过JDBC工具类获取10个连接保存到容器中
- 4.重写getConnection方法,从容器中获取一个连接并返回
- 5.定义getSize方法,用于获取容器的大小并返回
演示

package demo02.myDataSourse; import demo02.utils.JDBCUtils; import javax.sql.DataSource; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Logger; //自定义数据库连接池 public class demoDataSourse implements DataSource{ //1.准备容器,用于保存多个连接对象 private static List<Connection> pool = Collections.synchronizedList(new ArrayList<>()); //2.定义静态代码块,通过工具类获取10个连接对象 static{ for(int i=1;i<=10;i++){ Connection con = JDBCUtils.getConnection(); pool.add(con); } } //3.重写getConnection(),用于获取一个连接对象 @Override public Connection getConnection() throws SQLException { if(pool.size()>0){ Connection con = pool.remove(0); return con; }else{ throw new RuntimeException("连接数量已用尽"); } } //4.定义getSize方法,获取连接池容器的大小 public int getSize(){ return pool.size(); } @Override public Connection getConnection(String username, String password) throws SQLException { return null; } @Override public <T> T unwrap(Class<T> iface) throws SQLException { return null; } @Override public boolean isWrapperFor(Class<?> iface) throws SQLException { return false; } @Override public PrintWriter getLogWriter() throws SQLException { return null; } @Override public void setLogWriter(PrintWriter out) throws SQLException { } @Override public void setLoginTimeout(int seconds) throws SQLException { } @Override public int getLoginTimeout() throws SQLException { return 0; } @Override public Logger getParentLogger() throws SQLFeatureNotSupportedException { return null; } }测试
- 此处测试未对连接对象进行归还,而是直接关闭
- 演示中有影响结果,后面再介绍如何归还


package demo02.myDataSourse; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class demoDataSourseTest { public static void main(String[] args) throws Exception { //1.创建连接池对象 demoDataSourse dataSourse = new demoDataSourse(); System.out.println("使用之前的数量" + dataSourse.getSize()); //2.通过连接池对象获取连接对象 Connection con = dataSourse.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();//用完以后,未归还进行关闭连接;归还后面再讲 System.out.println("使用之后的数量" + dataSourse.getSize()); } }
边栏推荐
- BGP的基本配置和聚合
- 【Delphi】FMX Form的BorderStyles不同平台说明
- App Uploader下载安装
- 数组操作增,删,改,查
- Exchange 2010 SSL证书安装文档
- Week 6 Convolutional Neural Networks (CNNs)
- BUU刷题记4
- Three implementation methods of C # client program calling external program
- 密室逃脱、剧本杀加强监管 重点加强消防安全和未成年人保护
- Is flush reliable? I just started to learn financial management. Is it safe to open a securities account?
猜你喜欢
随机推荐
安全测试初学体验
解决IBGP的水平分割和BGP选路原则
.net GC workflow
After being fined "paid leave" for one month, Google fired him from AI on "love"
同花顺靠谱吗?我刚开始学习理财,开证券账户安全吗?
为什么 ThreadLocal 可以做到线程隔离?
tkinter使用wpf控件
Pandonia spirit voxedit creation competition
BUU刷题记1
Where are the single dogs in the evening of 5.20?
如何优雅地赞美他人?不妨尝试下这几种方式
gospel! Wechat personal official account can be renamed!
5.20晚上单身狗都在哪里?
【Delphi】FMX Form的BorderStyles不同平台说明
Exchange 2010 SSL证书安装文档
游戏合作伙伴专题:BreederDAO 与 Ultiverse 建立了一个新的元宇宙
QT信号与槽连接(松耦合)
Introduction to component functions of blueprism process business object Chapter 3 of RPA
SQL injection
There is an Oolong incident in open source. Maybe you don't know these five open source protocols











