【JAVA】数据库连接池(DBCP)的使用与操作
来源:互联网 发布:电信5s4g网络怎么设置 编辑:程序博客网 时间:2024/05/16 06:06
【JAVA】数据库连接池(DBCP)的使用与操作
在java中使用SQL语句操作数据库时,往往需要先加载驱动,建立连接,连接成功后,再执行一些SQL,而执行SQL之后,又需要考虑是否关闭连接。而当又有SQL要执行时,又需要重新建立连接,再做这些步骤。这里至少存在两个需要考量的事情,第一个就是连接建立需要花费一定的时间,影响SQL的执行效率。第二个就是,如果连接一直保持,不关闭,此时其他内容要执行SQL时也需要建立新的连接,这就产生了,无数的连接,导致系统因连接过多而奔溃。
数据库连接池,是在一个POOL池里维护一定数目的数据库连接:
1. 当程序需要操作数据库时,从池里拿出一条连接,分配出去。
2. 当程序执行完SQL时,将连接放回连接池里。
3. 数据库连接池初始有一定数目的连接,当有许多程序需要执行数据库时,连接池里的连接不够时,根据设置的连接数目上线建立新的连接,并分配给程序。
4. 当较少连接被使用时,连接池根据维护的空闲时连接数目关闭超出该数目的连接。
5. 当超出连接池上线数目的连接都被使用,而还有程序需要连接时,根据设定的超时时间等待获取连接,也可无限等待,直至连接池里有连接。
目录
- JAVA数据库连接池DBCP的使用与操作
- 目录
- 开发环境
- 开发流程
- 源代码
开发环境
- java开发工具包,jdk-8u144-windows-x64.exe
- java开发IDE,eclipse-jee-neon-2-win32-x86_64
- DBCP工具jar包,commons-dbcp2-2.1.1.jar
- POOL2工具jar包,commons-pool2-2.4.2.jar
- MSSQL JDBC工具jar包,sqljdbc4-3.0.jar
- logging依赖工具jar包,commons-logging-1.2.jar
- 项目工程源代码,github库
开发流程
- 建立数据库连接池DBCP;
- 配置连接池属性,通过dbcpconfig.properties配置,也可通过代码配置;
- 从连接池中拿连接;
- 执行SQL,与常规相同;
- close连接,这里并非关闭连接,而是将连接放回连接池中。
源代码
package com.demo;/** * @created time:2017年8月11日,下午2:18:12 * @author:chixh * @file:DataPool.java */import java.io.BufferedInputStream;import java.io.FileInputStream;import java.sql.Connection;import java.sql.Statement;import java.util.Properties;import org.apache.commons.dbcp2.BasicDataSource;import org.apache.commons.dbcp2.BasicDataSourceFactory;public class DataPool { public static void main(String[] args)throws Exception { poolMode(); } // 连接池模式 public static void poolMode() throws Exception { long s = System.currentTimeMillis(); String sql = "insert into test values(1,'iPhone8',8888.88)"; BasicDataSource ds = null; Connection conn = null; Statement st = null; Properties pro = new Properties(); //加载数据库连接池配置 pro.load(new BufferedInputStream(new FileInputStream("./dbcpconfig.properties"))); //建立连接池 ds = BasicDataSourceFactory.createDataSource(pro); //也可在这里set连接池属性 //设置连接池初始大小 ds.setInitialSize(8); //设置连接池最大容量 ds.setMaxTotal(20); for (int j = 0; j < 8; j++) { //这里获取连接,并非建立连接,而是从连接池中拿到连接 conn = ds.getConnection(); st = conn.createStatement(); for (int i = 0; i < 1000; i++) { st.executeUpdate(sql); } } System.out.println("expensive time:" + (System.currentTimeMillis() - s) + "ms");// (8,100,1199ms)(1466ms) //这里close连接,并非关闭连接,而是将连接放回连接池中 conn.close(); }}
数据库连接池配置,其中数据库服务器在本机localhost,username为sa,密码为root
#####dbcpconfig.properties#########DBCP configdriverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver://localhost:1433;databaseName=testdatabaseName=testusername=sapassword=root#connection pool initial sizeinitialSize=8#connection pool max connect nummaxActive=8#connection pool max idle nummaxIdle=8#connection pool min idle numminIdle=8#max wait timemaxWait=60000#connect other propertiesconnectionProperties=useUnicode=true;characterEncoding=utf8#default auto commitdefaultAutoCommit=true#default read onlydefaultReadOnly=#driver default TransactionIsolation#NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=REPEATABLE_READ#########DBCP config
//test.sql 数据库的表结构
--localhost use testCREATE TABLE "test" ( "id" INT NOT NULL, "phoneName" VARCHAR(50) NULL, "price" DECIMAL NULL);
阅读全文
1 0
- 【JAVA】数据库连接池(DBCP)的使用与操作
- 数据库连接池 dbcp与c3p0的使用
- 数据库连接池 dbcp与c3p0的使用
- java数据库连接池dbcp的使用
- dbcp数据库连接池的使用
- DBCP数据库连接池的使用
- DBCP数据库连接池的使用
- DBCP数据库连接池的使用
- 数据库连接池 dbcp与c3p0的使用区别
- JAVA数据库连接池简介与使用(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP)
- JAVA中使用DBCP做数据库连接池
- JAVA中使用DBCP做数据库连接池
- java数据库连接池dbcp
- apache dbcp数据库连接池的使用
- dbcp的简单使用_数据库连接池
- dbcp,c3p0数据库连接池的使用
- 11、数据库连接池DBCP的使用
- DBCP数据库连接池的简单使用
- Android UI
- CentOS7 matplotlib notebook 安装和使用
- JZOJsenior1444. 交换【推荐】
- 越大越聪明(输出路径问题)
- 用spark统计50年美国最常见的20个名字
- 【JAVA】数据库连接池(DBCP)的使用与操作
- codeforce-404D---Minesweeper 1D(dp)
- numpy array 增加一列(行)
- Spring 相关配置&属性注入
- Kotlin入门篇(二),如何声明函数和处理空值
- POJ
- 狼图腾-励志有声小说
- 博弈推理-UVA11892
- include/linux/mm_types.h