hibernate与数据库连接池技术 下载本文

内容发布更新时间 : 2024/6/26 21:59:28星期一 下面是文章的全部内容请认真阅读。

JDBC开发回顾

开发步骤

1)注册驱动 2)获得连接

3)获得SQL执行对象 4)执行SQL操作,获得结果集 5)操作结果集 6)释放资源

示例代码

public static void main(String[] args) throws Exception { //加载驱动 Class.forName(\); String url = \; String username=\; String password=\; //获取连接 Connection conn = DriverManager.getConnection(url, username, password); String sql = \; //获取执行对象 PreparedStatement ps = conn.prepareStatement(sql); //执行SQL,获取结果集 ResultSet rs = ps.executeQuery(); //遍历封装结果集 List list = new ArrayList<>(); while(rs.next()){ Student s = new Student(); s.setId(rs.getInt(\)); s.setName(rs.getString(\)); } } s.setAge(rs.getInt(\)); list.add(s); System.out.println(list); //释放资源 if(rs!=null){rs.close();} if(ps!=null){ps.close();} if(conn!=null){conn.close();}

普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。

这种方式将存在以下问题:

1)、数据库的连接资源并没有得到很好的重复利用。若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。

2)、对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。

3)、无法控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。

数据库连接池

什么是数据库连接池?

为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,无需每次操作都重新建立连接。

常用的数据库连接池

1)、DBCP

DBCP是Apache下独立的数据库连接池组件,在Tomcat中使用的连接池组件就是DBCP。特点是包含基本功能且配置简单,没有连接池监控功能,稳定性尚可,但在大并发环境下稳定性有所下降,速度稍慢。

2)、c3p0

c3p0是另外一个开源的连接池,在业界也是比较有名的,此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证, 此外不提供连接池监控。

3)、druid

DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池。

c3p0连接池参数

属性(Parameter) 默认值 描述(Description) user 数据库连接用户名 password 数据库连接密码 jdbcUrl 数据库连接地址 driverClass 使用的驱动 autoCommitOnClose false 默认值false表示回滚任何未提交的任务,设置为true则全部提交,而不是在关闭连接之前回滚 initialPoolSize 3 初始化连接:连接池启动时创建的初始化连接数量