basicdatasourcefactory mysql_Java基础-DBCP连接池(BasicDataSource类)详解

Java基础-DBCP连接池(BasicDataSource类)详解

作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池。

一.连接池概述

1>.什么是连接池

用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

3cd6c2e848b4418382e26c4bdd05ba0d.png

2>.规范

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!常见的连接池:DBCP、C3P0。本篇博客的主角是DBCP连接池。

二.DBCP连接池

DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池。如果我们想要使用它的功能的话,需要导入jar包,可以用Maven方式进行下载包,它可以帮我们解决一些依赖关系。Maven的使用请参考:http://www.cnblogs.com/yinzhengjie/p/9017416.html

1>.导入连接池jar包

e1be5913569b5f2b1836c7c014987609.png

2>.常见配置项

分类

属性

描述

必须项

driverClassName

数据库驱动名称

url

数据库的地址

username

用户名

password

密码

基本项(扩展)

maxActive

最大连接数量

minIdle

最小空闲连接

maxIdle

最大空闲连接

initialSize

初始化连接

三.BasicDataSource类的使用

1>.准备数据库实验环境

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/

4 EMAIL:y1053419035@qq.com5 */

6

7 CREATE TABLE Teacher(8 idINT PRIMARY KEY AUTO_INCREMENT,9 Name varchar(30) COLLATE gbk_bin DEFAULT NULL,10 Age intDEFAULT NULL,11 Job varchar(50),12 JobDescription varchar(100)13 );

2>.代码如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #@author :yinzhengjie2 #Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

3 #EMAIL:y1053419035@qq.com4 #5 DriverName=com.mysql.jdbc.Driver6 url=jdbc:mysql://192.168.0.254:5200/yinzhengjie?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true

7 username=root8 password=yinzhengjie9 initialSize=10

10 maxIdle=5

11 minIdle=3

12 maxActive=1

yinzhengjie.properties 文件内容

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6 package cn.org.yinzhengjie.note3;7

8 import javax.sql.DataSource;9 import org.apache.commons.dbcp.BasicDataSource;10 import java.util.ResourceBundle;11

12 /**13 * 在dbcp连接池的jar中,有 一个定义好的BasicDataSource累,通过查看源码,发现该实现类已经帮我们实现类了数据源的规范接口,即javax.sql.DataSource14 */

15 public class JDBCUtils {16

17 //创建DataSource接口的实现类对象(BasicDataSource),我们的dbcp工具包已经帮我们实现好了,咱们直接用就好!

18 private static BasicDataSource dataSource =new BasicDataSource();19

20 //定义数据库链接变量

21 private static final String DRIVERNAME;22 private static final String URL;23 private static final String USERNAME;24 private static final String PASSWORD;25 private static final intINITIALSIZE;26 private static final intMAXIDLE;27 private static final intMINLDEL;28 private static final intMAXACTIVE;29

30 static {31 //注意,我在Windows的配置文件全名是:“yinzhengjie.properties”,但是我们在给ResourceBundle的getBundle传参时应该注意两件事:第一,只传递文件名称并不传递文件后缀(即:yinzhengjie),第二,该文件应该在classpath中或者是跟包名在同一路径(即:在src目录中)

32 DRIVERNAME = ResourceBundle.getBundle("yinzhengjie").getString("DriverName");33 URL = ResourceBundle.getBundle("yinzhengjie").getString("url");34 USERNAME = ResourceBundle.getBundle("yinzhengjie").getString("username");35 PASSWORD = ResourceBundle.getBundle("yinzhengjie").getString("password");36 INITIALSIZE = Integer.parseInt( ResourceBundle.getBundle("yinzhengjie").getString("initialSize"));37 MAXIDLE = Integer.parseInt(ResourceBundle.getBundle("yinzhengjie").getString("maxIdle"));38 MINLDEL = Integer.parseInt(ResourceBundle.getBundle("yinzhengjie").getString("minIdle"));39 MAXACTIVE = Integer.parseInt(ResourceBundle.getBundle("yinzhengjie").getString("maxActive"));40 }41

42 //静态代码块,对象BasicDataSource对象中的配置,自定义

43 static {44 //链接数据库的4个最基本信息,通过对象的set方法进行设置如下:

45 dataSource.setDriverClassName(DRIVERNAME); //设置数据库驱动

46 dataSource.setUrl(URL); //设置访问数据库的路径

47 dataSource.setUsername(USERNAME); //设置登录数据库的用户名

48 dataSource.setPassword(PASSWORD); //设置登录数据库的密码49

50 //对象连接池中的常见配置项,以下的四个配置可以不配置(因为有默认配置),但是上面的四个是必须要配置的!

51 dataSource.setInitialSize(INITIALSIZE); //指定初始化的连接数

52 dataSource.setMaxActive(MAXIDLE); //指定最大链接数量

53 dataSource.setMaxIdle(MINLDEL); //指定最大空闲数

54 dataSource.setMinIdle(MAXACTIVE); //指定最小空闲数

55 }56

57 //定义静态方法,返回BasicDataSource类的对象

58 public static DataSource getDataSource() {59 return dataSource;60 }61

62 }

JDBCUtils.java 文件内容

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6 package cn.org.yinzhengjie.note3;7

8 import java.sql.SQLException;9 import java.util.List;10 import java.util.Map;11

12 import org.apache.commons.dbutils.QueryRunner;13 import org.apache.commons.dbutils.handlers.ArrayListHandler;14 import org.apache.commons.dbutils.handlers.MapListHandler;15

16 public class QueryRunnerDemo {17 //定义两个方法,实现数据表的添加,数据表查询,QueryRunner类对象,写在类成员位置

18 private static QueryRunner qr =new QueryRunner(JDBCUtils.getDataSource());19

20 public static void main(String[] args) {21 //insert();

22 select();23 }24

25 //数据表查询

26 private static void select() {27 String sql = "SELECT * FROM Teacher where name = ?";28 try {29 String FirstArgs = "尹正杰";30 List> list =qr.query(sql, new MapListHandler(), FirstArgs);31 //遍历集合list

32 for (Mapmap : list) {33 for(String key :map.keySet()){34 System.out.println(key + ":" +map.get(key) );35 }36 }37 } catch (SQLException e) {38 System.out.println(e);39 throw new RuntimeException("数据查询失败!");40 }41 }42

43 //数据表添加数据

44 private static void insert() {45 String sql = "INSERT INTO Teacher VALUES(null,?,?,?,?)";46 Object[] params = {"尹正杰",26,"高级云计算工程师","负责网站架构维护,维护上万台服务器正常运行!"};47

48 try {49 int row =qr.update(sql,params);50 if(row != 0) {51 System.out.println("添加成功");52 }53 } catch (SQLException e) {54 e.printStackTrace();55 throw new RuntimeException("数据添加失败!");56 }57 }58 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生物神经网络衍生出的算法

一个生物神经网络的基本结构: 生物神经网络由大量神经元组成,这些神经元之间通过突触相互连接。神经元可以接收来自其他神经元的信号,并根据信号的强度和类型来调整自己的输出信号。这种神经元之间的相互连接和信号传递形成了生物神经网络的基…

echart实例数据 本地加载_JVM 类加载概述

来源:SegmentFault 思否社区作者:又坏又迷人JVM简介JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Ja…

JPA / Hibernate:基于版本的乐观并发控制

本文是Hibernate和JPA中基于版本的乐观并发控制的简介。 这个概念已经很老了,上面已经写了很多东西,但是无论如何我都看到了它被重新发明,误解和滥用。 我在编写它只是为了传播知识,并希望引起人们对并发控制和锁定的兴趣。 用例…

高可用集群搭建

高可用集群搭建  创建hadoop账户 创建hadoop账户(#注意,接下来的操作均在hadoop账户下运行) # useradd hadoop # passwd hadoopsu - hadoopmkdir soft disk1 disk2mkdir -p disk{1,2}/dfs/{dn,nn}mkdir -p disk{1,2}/nodemgr/local 将本地目…

scrt如何切换成英文版_英文版SecureCRT显示乱码解决

英文版SecureCRT显示乱码解决系统环境:CentOS5.6以前Linux都是默认安装在英文环境下,用英文版的SecureCRT查看系统内容输出的也都是英文的,不会出现乱码问题。今天同事在服务器安装时默认选择了简体中文,这…

java try catch_Java捕获异常

大家好,欢迎来到乐字节小乐的Java技术分享园地在Java中,凡是可能抛出异常的语句,都可以用try ... catch捕获。把可能发生异常的语句放在try { ... }中,然后使用catch捕获对应的Exception及其子类。多catch语句可以使用多个catch语…

haproxy文件操作

import os #导入os模块def search(): #定义查找函数 with open(haproxy.txt,r) as f: #只读方式打开文件 value input(请输入您…

多语言持久性:带有MongoDB和Derby的EclipseLink

从现在开始,多语种持久性一直是新闻。 从2011年底开始,在著名的Fowler帖子的推动下,我看到了更多更好的主意。 最新的一个是公司内部的学生项目,我们在其中使用Scala作为后端数据,将数据持久存储到MongoDB,…

web前端开发最佳实践--(笔记之JavaScript最佳实践)

如何避免全局变量污染? 避免定义全局变量或全局函数用一个变量进行封装,并返回外部需要访问的接口如何写出高维护的js代码 配置数据和代码逻辑分离 如: 改成: ---用js模板mustachehandlebarsjsMVC的数据模式 model:数据…

yum mysql5.7位置_CentOS yum 安装 Mysql5.7

1 Steps for a Fresh Installation of MySQL# wget https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm# yum localinstall mysql57-community-release-el6-9.noarch.rpm以上步骤其实是把 MySQL Yum repository 添加到了系统的 repository list 里去了。ll…

HTML/CSS基础知识(四)

WEB标准和W3C的理解与认识 Web标准是一系列标准的集合。 网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。 对应的标准也分三方面:结构化标准语言主要包…

python做一个系统代码_python初学者,用python3实现基本的学生管理系统代码实例...

这篇文章分享了管理系统,python学生管理系统的使用,这篇文章非常详细地介绍了通过示例代码实现的学生管理系统,该系统对每个人的研究或工作都有一定的参考学习价值。 这个是用python实现的基本的增删改查的学生管理系统吧,其中主要…

Python入门笔记

Python变量和数据类型 数据类型 print语句 注释 Python的注释以 # 开头,后面的文字直到行尾都算注释 # 这一行全部都是注释... print hello # 这也是注释 什么是变量 定义字符串 字符串可以用或者""括起来表示。 如果字符串本身包含怎么办?比如…

1058. 选择题(20)

原题: https://www.patest.cn/contests/pat-b-practise/1058 思路: 本题主要就是怎么读取数据的问题, 一定要注意scanf函数匹配到 空格或者回车会结束当前变量的赋值, 并且会丢弃这个空格或回车. 关于如何判断一项答题是否正确, 可以采用循环一个一个判断, 也可拼成 字符串用st…

使用Spring和Hibernate进行集成测试有多酷

我有罪,直到现在才写集成测试(至少针对数据库相关事务)。 因此,为了消除内感,我阅读了如何在周末以最少的努力实现这一目标。 提供了一个小示例,描述了如何使用Spring和Hibernate轻松实现这一目标。 通过集…

假设mysql数据表t1有字段_使用ROMA Connect集成数据

概述ROMA Connect支持接入多种类型的数据源,并通过数据集成任务实现源端到目标端的数据集成转换。ROMA Connect支持相同结构数据之间进行集成转换,也支持异构数据之间进行集成转换。本章节通过完成一个SQL Server到MySQL的数据集成配置样例,帮…

vue-wechat-title

html中的title安装:npm install vue-wechat-title --save1.在mian.js中//网页titleimport VueTitle from vue-wechat-title Vue.use(VueTitle);2. 路由中加下 title { path: /, component: Index, meta: { title: 首页 } }3. 在app.vue 中修改 router-view &a…

如何保证input的输入值不会随着提交 而变空_如何对web界面的应用进行测试?

一、输入框:1、字符型输入框:(1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时&…

CentOS6.x下,tomcat - web项目部署

1. 安装tomcat tomcat安装方法&#xff1a;http://www.cnblogs.com/vurtne-lu/p/6478440.html 2. 配置tomcat 修改server.xml文件 <!-- 使用 80 端口 (也可以使用其它端口)--> <Connector port"80" protocol"HTTP/1.1"connectionTimeout"200…

dedecms列表页面随机缩略图调用

如果要利用dedecms制作扁平化主题&#xff0c;大概也能够遇到相似的问题&#xff0c;那就是dedecms的缩略图机制&#xff0c;在没有缩略图的情况下显示单一的默认图片&#xff0c;如果是wordpress可以很方便的定义函数调用随机的缩略图&#xff0c;即便是在没有设置缩略图并且文…