数据库连接有很多中方式,JDBC数据库的连接方式,前边我们已经介绍过了,而开发中我们经常使用的是DataBaseConnectionPool(数据库连接池,DBCP)。数据库连接池到底是什么?它比jdbc数据库连接有什么优势呢?它又怎么使用呢?

一,先看一下JDBC连接,每次用户访问数据库时,需要JDBC为我们创建数据库连接,我们使用,然后关闭。而当我们加断点测试,可以发现这个过程中创建数据库连接这个过程是比较费时间的,而不是我们在数据库中操作数据费时间。所以JDBC这种方式的效率大大折扣。而且如果过多的人同时并发来访问数据库,连接数量创建过多,会导致性能降低,更严重可能会导致数据库崩溃。而,数据库连接池就是来解决这两种问题的。

二,数据库连接池是什么?

顾名思义就是盛放多个数据库连接的一个池子!当我们访问数据库时我们直接从这个池子中拿连接对象即可,省去了初始化创建的过程,大大提高了效率。而且这个池子可以控制数据库连接的数量,我们里边可以至少放上几个,不够用了再进行创建,最多能够创建几个等等来控制连接的数量。它就是这么一个技术。准确一点说,连接池是一种缓存技术(cache,因为这个池子是在缓存中存放的。

三,连接池的优势呢?

其实就是解决了JDBC的劣势。提前准备好连接对象,提高了访问效率,控制连接数量,防止同时过多用户访问导致性能大大降低,数据库崩溃。

四,DBCP怎么使用?

编写数据库连接池是比较麻烦的,而且编写出来的效果如何另说。所以一般我们都使用现成的。各种服务器都为我们提供了,这里先看一下Tomcat服务器的数据库连接池如何使用。

1,在tomcatcatalina_home/webapps/webapp/meta-inf/目录下新建context.xml文件,来编写DBCP,这是针对此应用程序的(当然也可以之间在tomcatcatalina_home/conf/context.xml中编写,这个这个是针对这个tomcat服务器的),编写内容如下:

<?xml version="1.0" encoding="GBK"?><!--这是数据连接池的配置文件,只有name可以自己定义 --><Context reloadable="true"><Resource name="jdbc/ljh" auth="Container" type="javax.sql.DataSource"maxActive="100" maxIdle="30" maxWait="10000" username="ljh" password="ljh"driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.1.27:1521:ljh" /></Context>

大家可以通过名字看出,这都是在设置dbcp的各个属性,例如,最大连接数,最小连接数,最长等待时间等等,设置好以后我们就可以使用了。

那么怎么使用呢?这里就涉及到了JNDIJNDIJ2EE13个规范之一,也是非常重要的。这里我来先简单介绍一下JNDI

  • JNDIJava Naming and Directory Interface java命名和目录服务接口
  • 降低程序和程序之间的耦合性
  • 降低设备和设备的耦合性
  • Tomcat服务器实现了JNDI服务,启动Tomcat服务器,等同于启动JNDI服务器
  • JNDISUN制定的一套规范,这套规范可以和JDBC进行类比,JDBC也是一套规范,我们面向JDBC接口调用就可以获取数据库中的数据。同样,我们面向JNDI接口调用,可以获取“资源”,这个资源不是在底层数据库中。
  • JNDI提供了一种服务,这个服务可以将“名称”和“资源”进行绑定,然后程序员通过面向JNDI接口调用方法lookup可以查找到相关的资源。

由于只是简单了解,要想了解更多关于JNDI的资料,请查看:JNDI是什么JNDI简介  tomcat配置JNDI

jboss配置JNDI

看我们怎么通过JNDI来获取连接池:

//获取JNDI的上下文对象ContextContext context = new InitialContext();//根据名称和资源的绑定来获取数据源连接池,其中java:/com/env是tomcat实现JNDI的路径,后边是我们连接池名字DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/ljh"); //get,获取一种的一个连接,当然下边的close就是返回一个连接给连接池,这里的连接池都对Connection中的方法进行重写,例如close,是返回给连接池,而不是关闭数据库连接。  conn = ds.getConnection();

这样我们就可以使用连接对象了。

综上为连接池DBCPJNDI的联合使用访问数据库。在实际开发中我们经常使用C3P0连接池,因为它开源的,而且和各种框架一起使用非常方便,效率也更高。不过原理跟上边的差不多,都是依赖JDBC规范和JNDI规范,来实现的,这里看一些它的资料吧!  C3P0英文文档   C3p0百科

综上为数据库连接,顺便简单总结了一下JNDI。数据库连接在每个系统中都会使用,虽然可能就需要我们配置一次,编写一次,但是是非常重要的,因为数据的安全是非常重要的哈。所以还是需要我们好好掌握的。

数据连接池——JNDI相关推荐

  1. Netbeans 中创建数据连接池和数据源步骤(及解决无法ping通问题)

    1.启动glassfish服务器, 在浏览器的地址栏中输入 http://localhost:4848 2.首先建立JDBC Connection Pools: 3.new 一个Connectio P ...

  2. JdbcTemplate(1)(数据连接池)

    一.环境准备 1.1 导入JAR包 ①IOC容器所需要的JAR包 commons-logging-1.1.1.jar spring-beans-4.0.0.RELEASE.jar spring-con ...

  3. mysql怎么连接数据连接池_Mysql数据库连接池

    一 开源数据连接池 1 dbcp dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧. 这个连接池可以设置最大和最小连接,连接等待时间 ...

  4. 【Springboot 入门培训】#3 MyBatis 多数据源与缓存和数据连接池设置

    介绍MyBatis项目中如何配置多个数据源连接数据库,以及设置sql文的二级缓存功能,配置多数据源与数据连接池等功能.为大家开发和平时练习的时候提供参考和查询的工具文章. 代码下载百度网盘下载:htt ...

  5. c dbhelper类下载mysql_分享一个简单的C#的通用DbHelper类(支持数据连接池)

    每次新项目的时候,都要从头去找一遍数据库工具类.这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池. 连接池配置 DbHelper类 public classDBHelper { ...

  6. JDBC、数据源、数据连接池的介绍和区别(三个是不同的东西,别再搞混了)

    1.JDBC的介绍   为了使Java编写的程序不依赖于具体的数据库,Java提供了用于专门操作数据库的API,即JDBC(Java Data Base Connectivity).JDBC操作不同数 ...

  7. 数据连接池的工作机制是什么

    数据连接池是把数据库连接放到中间服务器上,比如tomcat上,那么相当于每次你操作数据库的时候就不需要再"连接"到数据库再进行相关操作,而是直接操作服务器上的"连接池&q ...

  8. SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,druid)

    SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,druid) 文章目录 SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,drui ...

  9. 数据连接池的工作机制是什么?

    以典型的数据库连接池为例: 首先普通的数据库访问是这样的:程序和数据库建立连接,发送数据操作的指令,完成后断开连接.等下一次请求的时候重复这个过程,即每个请求都需要和数据库建立连接和断开连接,这样当数 ...

最新文章

  1. plsql执行command命令控制台出现乱码_设计模式系列 — 命令模式
  2. 动态导入ECMAScript模块一文看懂
  3. C++中explicit关键字的作用
  4. 【英语学习】【Level 07】U06 First Time L5 A Different City
  5. C陷阱与缺陷--读书笔记3 语义“陷阱”
  6. Java向mysql导入大量scv文件数据(100万行以上)
  7. 【Visio开发工具】用Visio绘制封闭曲面并填充颜色
  8. 汉语数字转换成阿拉伯数字
  9. 金蝶K3 WISE BOM多级展开_BOM成本表
  10. Redis 异地双活实战
  11. 有人说“星座对自己的运势预测和性格描述很准”。请谈读你的看法。 “星座热”的社会学解读
  12. 锁相环载波同步MATLAB实现,MATLAB中利用锁相环实现载波同步
  13. 系统出错。 发生系统错误 1067。 进程意外终止。
  14. Java8 - Streams flatMap()
  15. 【翻译】用 安全即代码 保护你的GitOps流程
  16. 【java】115-Java经典
  17. Windows_PC端微信双开/多开方法汇总(不改软件和插件,批处理)[微信技术教程]
  18. java ajax同步请求,成都汇智动力-java ajax实现异步同步请求全面详解
  19. 《python数据分析与挖掘实战》笔记第5章
  20. 日用百货批发行业进销存规范实施要点

热门文章

  1. 为知笔记有linux版本吗,为知笔记Linux版
  2. 安装python包时报‘HTMLParser‘ object has no attribute ‘unescape‘
  3. simple-uploader前端分片上传文件
  4. 敬往事一杯酒,敬已逝去的 2018~
  5. glusterfs java_GlusterFS: 访问权限设置
  6. 火绒安全自定义防护规则
  7. linux CMA 布局
  8. 对链路负载均衡与应用负载均衡的通俗理解
  9. 惠普HP Color LaserJet Enterprise M751dn 驱动
  10. Android 仿钉钉、微信 群聊组合头像 CombineBitmap