Chen's WinterSakura
TOP
主页 空间 收藏 IT资讯 分享 联系建议

学习分享

最坏的习惯,是苟安于当下的生活,不知道明天的方向

关于MySQL、JDBC数据库连接池

批量更新:API

       addBatch(String sql)
              Statement类的方法,可以将多条SQL语句添加到Statement对象的SQL语句列表中

       executeBatch()
              把Statement对象语句列表中的所有SQL语句发送给数据库进行处理

       clearBatch()
              清空当前SQL语句列表

防止OutOfMemory

       如果statement对象中德SQL列表包含过多的待处理SQL语句,可能会产生OutOfMemory错误

       解决办法是即使处理SQL语句列表

for(int i = 0 ; i < 100000 ; i++) {
       sql = "insert into ....";
       stmt.addBatch(sql);
       if(i % 500 == 0) {
              stmt.executeBatch(); // 及时处理
              stmt.clearBatch(); // 清空列表
       }
} // 最后一次列表不足500条,处理
stmt.executeBatch();


返回自动主键

主表/从表关联关系中,插入数据时需要保证数据完整性

关联数据插入的流程如下

       用户点击下单插入主表记录(订单信息表)获取主表主键值插入从表记录,上一步获得的主表主键值,作为从表外键值下单成功JDBC返回自动主键API

       利用Statement的getGeneratedKeys方法获取自增类型的数据,性能良好;


数据库连接池

为什么要使用连接池

       数据库连接的建立及关闭资源消耗巨大

       传统数据库访问方式:一次数据库访问对应一个物理连接,每次操作数据库都要打开,关闭该物理连接,系统性能严重受损

解决方案:数据库连接池(Connection Pool)

       系统初始运行时,主动建立足够的连接,组成一个池,每次应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用完后,不在关闭,而是归还

连接池中连接的释放与使用原则

       应用启动,创建初始化数目的连接

       当申请时无连接可用或者达到指定的最小连接数,按增量参数值创建新的连接

       为确保连接池中最小的连接数的策略

              动态检查:定时检查连接池,一旦发现数量小于最小连接数,则补充相应的新连接,保证连接池的正常运转

              静态检查:空闲连接不足时,系统才检查是否达到最小连接数

       按需分配,用过归还,空闲超时释放,获取超时报错

连接池也只是接口,具体实现由厂商来完成

使用Apache DBCP 连接池

DBCP (DataBase connection pool): 数据库连接池

Apache的一个Java连接池开源项目,同时也是Tomcat使用的连接池组件

连接池是创建和管理连接的缓冲池技术,将连接准备好被任何需要它们的应用使用

需要依赖的两个jar包

       commons-dbcp2-2.1.1 连接池的实现

       commons-pool2-2.4.2 连接池实现的依赖库

              BasicDataSource datasource = new BasicDataSource();

              // 设置驱动,URL,账号,密码

              datasource.setDriverClassName(driveClassName);

              datasource.setUrl(url);

              datasource.setUsername(username);

              // 从连接池对象中获取连接

              Connection conn = datasource.getConnection();

              // 将连接归还到连接池

              conn.close() ; // 连接池的connection重写了close()方法,不再是关闭连接

连接池常用参数

初始连接数

       initialSize , 默认0
       当这个池被启动时初始化的创建的连接个数

最大连接数

       maxTotal , 默认8
       可以在这个池中同时被分配的有效连接数的最大值,如设置为负数,则不限制

最大空闲数

       maxIdle , 默认8
       可以在池中保持空闲的最大连接数,超出设置值之外的空闲连接将被回收,如设置为负数,则不限制

最小空闲数

       minIdle , 默认 0
       可以在池中保持空闲的最小连接数,超出设置值之外的空闲连接将被创建,如设置为0,则不创建

最大超时时间

       maxWaitMillis , 单位毫秒,默认最大int值
      (如果没有可用连接)池在抛出异常前等待的一个连接被归还的最大毫秒数,设置为-1则等待时间不确定

免责声明

本网站属于个人的非盈利性网站、博客,主要是一些学习过程中的一些心得分享和笔记,同时可能存在部分非私人原创撰写的文章,由于在过程中浏览过别人分享于本人的资源,可能一些源自于网络,亦可能误摘抄他人分享转载的文章,按照目前互联网开放的原则,将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,被本人误载入,非常抱歉,请务必来信告知:miku109040azusa@vip.qq.com

© 2016-2017 Build by Chen | WinterSakura.COM 粤ICP备17119124号