(7)JDBC改进连接池(封装连接)

必要性

(1)每次向数据库建立连接都要把Connection加载到内存中,再验证IP地址,用户名和密码,完毕之后就会断开连接,这样会耗费很多资源,使得数据库连接资源没有得到很好的重复利用
(2)如果程序出现异常没有关闭,会导致数据库中的内存泄漏,最终将导致重启数据库
(3)而且这样连接不能控制连接个数,系统如果连接过多,可能会导致内存泄漏,服务器崩溃
所以为了解决数据库连接问题,采用了数据库连接池技术
它的基本思想就是建立一个数据库连接池,在里面放一定数量的连接,由它来负责分配,管理和释放数据库连接。当超过连接最大数量时,这些请求将会被加入到等待队列

优点

(1)资源重用(2)更快的反应速度(3)新的资源分配手段(4)统一的连接管理,避免数据库连接泄漏

实现

连接池利用javax.sql.DataSource这个接口来实现,有很多种不同开源组织的实现,包括连接池和连接池管理两个部分,数据源只需一个。程序结束后也需要close,但没有关闭物理连接,只是归还给了连接池
DBCP是Apache提供的,速度快
C3P0 速度慢,稳定性好
Druid德鲁伊,阿里提供,集齐了优点

步骤

第一步是将druid的jar包添加到libs下,然后添加到类库
第二步是准备一个放置了各种名字的properties 比如说驱动名com.mysql.jdbc.Driver,数据库的url,用户名,密码,连接池中的默认连接数,最大活跃连接数,最小空闲连接数,最大等待时间
第三步。
properties p=new properties();
p.load(new FileInutStream(“src\druid.properties”));
DataSource d=DruidDataSourceFactory.createDataSource§;直接创建一个连接池
Connection c=d.getConnection();就可以直接得到连接
可以利用这个来重新封装一下JDBCUtils。

使用开源框架步骤

1.找到jar包,添加类库
2.一般要看帮助文档,在doc/apidocs/index.html 或者时别的地方的index.html
3.一般会有一个快速开始的代码样板,可以复制一下
比如说C3P0也有两种方式来用,第一种直接复制快速开始的内容,第二种是利用配置文件的内容(不过这里用的是xml而不是properties,其实类似,xml中标签用的也是properties)
可以看到第二种方式用的仍然是ComboPooledDataSource(java.long.string configName)所以把刚才的配置文件传进去就可以直接得到。传的名字是配置文件中named-config标签下的名字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于JDBC数据库连接池封装的问题。一般来说,数据库连接池是一种可以重复使用的数据库连接资源集合,提高了数据库的访问效率,尤其是在高并发环境下。下面是一个简单的JDBC连接池封装代码: ```java public class ConnectionPool { private static ConnectionPool instance = null; private Vector<Connection> connectionPool = new Vector<Connection>(); private String url = "jdbc:mysql://localhost:3306/test"; private String user = "root"; private String password = "root"; private int poolSize = 10; //初始化连接池,创建连接 private ConnectionPool() { for (int i = 0; i < poolSize; i++) { try { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, user, password); connectionPool.add(connection); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } //获取连接池实例 public static synchronized ConnectionPool getInstance() { if (instance == null) { instance = new ConnectionPool(); } return instance; } //获取连接 public synchronized Connection getConnection() { Connection connection = null; if (connectionPool.size() > 0) { connection = connectionPool.get(0); connectionPool.remove(connection); } return connection; } //释放连接 public synchronized void releaseConnection(Connection connection) { connectionPool.add(connection); } } ``` 在上述代码中,我们使用了一个Vector来存储连接,然后通过getInstance()方法获取连接池实例,在需要使用连接时,调用getConnection()方法获取连接,使用完毕后,调用releaseConnection()方法释放连接,从而实现了JDBC连接池封装

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值