连接数据库方法2-DBCP
DBCP(连接池):
解决对数据库建立以及关闭连接时消耗大量资源的解决方案。
程序创建和关闭对数据库连接时会消耗大量的资源,连接池技术帮我们
在程序运行的开始时就预先创建大量的连接,这些连接组成一个池,每次
程序请求访问数据库的时候,无需创建连接,而是从池中去除已有的连接。
使用完后不需关闭而是归还连接。
释放与使用原则:
应用程序启动,创建初始化一定数目的连接
当申请时无连接可用,或者达到指定的最小连接数,按增量参数值创建连接。
为确保连接池最小的连接数策略:
1.动态检查:定时检查连接池,一旦发现数量小于最小连接数,则补充相应新的连接,保证连接池正常运作
2.静态检查:空闲连接不足时,系统才检查是否达到最小连接数。
DBCP的创建步骤:
(1)先创建一个properties文件(如:db.properties),里面存放连接池的参数。(此步骤方便对DBCP参数的修改)
(2)properties文件的格式可参考如下:
jdbc.driver=oracle.jdbc.OracleDriver //连接数据库(oracle)的端口 jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl //连接数据库的路径 jdbc.user=system //数据库的用户名 jdbc.password=123456 // 数据库的连接口令 dbcp.nitialSize=10 dbcp.maxIdle=20 dbcp.minIdle=5 dbcp.maxActive=50 dbcp.maxWait=1000
(3)java使用连接池连接数据库的代码:
public class DBCP { private static BasicDataSource dataSource=null; //创建一个连接池对象 public static void init(){//加载方法 Properties p = new Properties(); //创建properties对象来操作properties文件 try {//加载配置文件 p.load(connetionSource.class.getClassLoader().getResourceAsStream("db.properties")); //映射到properties文件的位置 } catch (IOException e) { e.printStackTrace(); } try{ //读取properties文件,获取属性字段 String driver =p.getProperty("jdbc.driver"); String url =p.getProperty("jdbc.url"); String username =p.getProperty("jdbc.user"); String password =p.getProperty("jdbc.password"); // 初始化dataSource dataSource= new BasicDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); /** * 连接池参数 * 初始连接数 initialSize * 最大连接数 maxActive * 最小连接数 minActive * 每次增加的连接数 * 超时时间 maxWait * 最大空闲连接 maxIdle * 最小的空闲连接 minIdle */ String initialSize =p.getProperty("dbcp.initialSize"); String minIdle=p.getProperty("dbcp.minIdle"); String maxIdle=p.getProperty("dbcp.maxIdle"); String maxActive= p.getProperty("dbcp.maxActive"); String maxWait =p.getProperty("dbcp.maxWait"); //初始化连接数: if(initialSize!=null){ dataSource.setInitialSize(Integer.parseInt(initialSize)); } //最大空闲连接 if(maxIdle!=null){ dataSource.setMaxIdle(Integer.parseInt(maxIdle)); } //最小空闲连接· if(minIdle!=null){ dataSource.setMinIdle(Integer.parseInt(minIdle)); } //最大连接数 if(maxActive!=null){ dataSource.setMaxActive(Integer.parseInt(maxActive)); } //超时回收连接 if(maxWait!=null){ dataSource.setMaxWait(Integer.parseInt(maxWait)); } }catch(Exception e){ System.out.println("创建连接池失败,请检查配置"); } } public static synchronized Connection getConnection() throws SQLException{ if(dataSource ==null){//没有就连接池则加载一个连接池 init(); } Connection conn=null; if(dataSource !=null){ conn=dataSource.getConnection(); } return conn; } }
(4)新开一个类,创建链接
连接数据库方法2-DBCP的更多相关文章
- MATLAB通过ODBC连接数据库方法
MATLAB通过ODBC连接数据库方法 1.首先创建数据库,我在这里用到的是MySQL 8.0 2.建立ODBC数据源,参考链接: https://www.cnblogs.com/benpao1314 ...
- 连接数据库 JDBC、DBCP、JNDI
一.JDBC package com.direct.util; import java.sql.Connection; import java.sql.DriverManager; import ja ...
- JDBC连接数据库方法的封装,以及查询数据方法的封装
(在上一篇文章中,我们详细的介绍了连接数据库的方法,以及eclipse操作数据库信息的相关方法,在这里我们将主要讲封装.) 主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个 ...
- python:封装连接数据库方法
config.py # 数据库测试环境 name = '***' password = '******' host_port_sid = '10.**.*.**:1521/bidbuat' Oracl ...
- Django ORM 以连接池方式连接底层连接数据库方法
django原生支持是不支持 以连接池方式连接数据库的 概述 在使用 Django 进行 Web 开发时, 我们避免不了与数据库打交道. 当并发量低的时候, 不会有任何问题. 但一旦并发量达到一定数量 ...
- 连接数据库方法---DAO,RDO,OLE,ADO
2012-12-14 09:40 (分类:计算机程序) DAO (Data Access Objects) 提供了一种通过程序代码创建和操纵数据库的机制.最大特点是对MICROSOFT JET(Jet ...
- Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...
- 数据库连接池(DBCP:为数据统一建立一个缓冲池,现在企业开发使用)
数据库连接池:(里面放了许多连接数据的链接,负责分配,管理,释放数据库连接,可重复使用连接,而不新建 )为数据统一连接建立一个缓冲池,放好了一定数据库连接,使用时在缓冲池里面拿,用完之后再还给缓冲池 ...
- DAO模型设计实现数据的 增,删,改,查方法
连接数据库方法,及反射获取数据,以前的方法相同,测试类 是在DAO模型下建立的 ------------------------------------------------------------ ...
随机推荐
- windows系统下使用mycat实现mysql数据库的主从复制,从而实现负载均衡
在之前有记录过在一台系统中安装多台数据库,同时实现主从复制,但是那个主从复制只是一个基于dosc命令的,再实际的开发中我们不会去直接连接数据库,一般情况下我们也是通过间接的采用一些中间件去连接,本来是 ...
- 015.CI4框架CodeIgniter数据库操作之:Query带参数查询数
01.我们在Models中写数据库的操作.具体的查询代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class U ...
- Java中null的判断
Java中空指针的异常十分常见 if (name != null && !name.equals("")) { //do something } 或者 if (!& ...
- 数据结构——Java Stack 类
定义 栈是Vector的一个子类,它实现了一个标准的后进先出的栈.堆栈只定义了默认构造函数,用来创建一个空栈. 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法. 图例 在下面图片中可 ...
- UVA 12510/CSU 1119 Collecting Coins DFS
前年的省赛题,难点在于这个石头的推移不太好处理 后来还是看了阳神当年的省赛总结,发现这个石头这里,因为就四五个子,就暴力dfs处理即可.先把石头当做普通障碍,进行一遍全图的dfs或者bfs,找到可以找 ...
- 前端学习(22)~css问题讲解
你是如何理解 HTML 语义化的? 语义化:指对文本内容的结构化(内容语义化),选择合乎语义的标签(代码语义化). 举例:段落用 p,边栏用 aside,主要内容用 main 标签. 好处: 便于开发 ...
- Linux学习《第五章 用户身份与文件权限》
- HDU - 6130 Kolakoski (打表)
题意:由1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,……合并可得1,22,11,2,1,22,1,22,11,2,11,22,1,再由每个数的位数可得新序列,推出新 ...
- HDU - 3729 I'm Telling the Truth(二分匹配)
题意:有n个人,每个人给出自己的名次区间,问最多有多少个人没撒谎,如果有多解,输出字典序最大的解. 分析: 1.因为字典序最大,所以从后往前分析. 2.假设后面的人没说谎,并将此作为已知条件,然后从后 ...
- 在Ubuntu下搭建Android开发环境(AndroidStudio)
在ubuntu下搭建Android开发环境 本教程的开发环境的搭建有三个大步骤:安装Java jdk,安装Android studio,安装sdk 笔者搭建环境的时候用的是Ubuntu18.04 1. ...