Java中DriverManager跟DataSource获取getConnection有什么不同(Java中数据源和连接池的区别)

一、理解什么是数据源和连接池

数据源:数据的源头,需要设置数据库url,用户名和密码,此时就相当于一个代理数据库;它包含连接池和连接池管理两个部分;

              Java中的数据源就是javax.sql.DataSource。DataSource是Java定义的接口,可以有不同的实现。

连接池:一个连接相当于数据源和dao层的管道,那连接池就相当于存放了很多管道的池子;我们获取连接不从数据源取而是从                连接池取;

二、常见的连接池

常见的数据库连接池:JNDI、 C3p0、 Apache 的Jakarta DBCP、BoneCP

JNDI:负责管理数据库连接池,进行数据库资源的管理,在容器中配置一个数据库连接池,使用JNDI 来管理;如果不使用JNDI的方式,直接在项目中配置数据库连接池,那么每个项目需要配置一次,如果更改数据库地址时,每个项目的数据库连接方式都要更改,比较麻烦;但使用JNDI的话,直接更改一下JNDI里面的数据库连接池的配置就可以了,方便一些。JNDI方式创建实现的datasource是真正实现了javax.sql.datasource;其他的三种方式都不是。

C3P0:是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring(sping框架依赖的第三方使用了c3p0和dbcp两种方式)等;c3p0有自动回收空闲连接功能

DBCP;也具有连接池的功能,但DBCP没有自动回收空闲连接的功能,

BoneCP:号称是速度最快的数据库连接池

三、数据源和连接池在代码中的体现

原生获取数据库连接:

String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";  
String  url="jdbc:sqlserver://localhost:1433;databaseName=test_01";  
String user="sa",password="123456";      //这里是你的sa账号密码

//加载驱动
Class.forName(driver); 
// DriverManager获取一个连接
java.sql.Connection con = DriverManager.getConnection(url,user,password); 
//通过连接获取操作数据库的对象
Statement stmt= con.createStatement();
//操作数据库增删改查
String a1="INSERT INTO USERS VALUES('1','xx')";
stmt.executeUpdate(a1);//执行SQL命令对象

现在:spring已经封装好,直接用mapper对象调用方法即可查询数据库;那么具体怎么实现,需要分析源码;sping框架使用了第三方c3p0和dbcp两种方式,用其中任意一种方式均可;

mybatis中设置连接池:

spring中连接池的设置:

此处使用了c3p0连接池:

 

四、Java中DriverManager跟DataSource获取getConnection有什么不同

当使用JDK提供的java(x).sql包中的类访问数据库时候,基本上用到的就是drivermanager,connection,statement,resultset。其中drivermanger是类,他调用相应的驱动(即各个数据库厂商提供的驱动)中的方法生成connection对象。Connection是接口,在各个数据库厂商提供的数据库驱动中,都实现了该接口。例如:当使用com.mysql.jdbc.driver时候,生成的connection即为com.mysql.jdbc.Connection对象。

Javax.sql包中定义了接口datasource,统一规定了作为数据源连接池必须提供的方法和属性等。各个数据源组件中提供的datasource都实现了该接口。当通过数据源连接池的方式获取connnection的时候,同样的,各个数据源组件也都提供(实现了java.sql.connection)接口的类。

更为具体的细节,可以参考jdk文档中关于java(x).sql包中相关类和接口的描述;参考开源数据源连接池组件的相关源码(例如C3P0);参考相关的数据库驱动。

综上:DriverManager是获取一个connection,用完就进行关闭,需要又重新建立连接;

           Datasource获取多个connection并管理起来,作为数据库连接池;很多第三方连接池都通过实现该接口来做连接池;

DriverManager在Java中的位置,java.sql包下

Datasource在Java中的位置,javax.sql包下

五、Java连接数据库方法概述

java.sql提供了一些接口和类,用于支持数据库增删改查等相关的操作。该jar包定义了java访问各种不同数据库(mysql,oracle,sqlserver。。。。。)的统一接口和标准。同时,各个数据库厂商都提供了该jar包中定义的各个接口的实现类,用于具体实现本厂数据库的增删改查操作,即称之为“数据库驱动jdbc driver”。例如mysql的数据库驱动为:com.mysql.jdbc.driver;oracle的数据库驱动为:oracle.jdbc.driver.oracledriver。

在java程序中访问数据库,做数据库连接时,可以采用两种方式:

1、使用java.sql API

利用该包提供的各种接口和类直接访问数据库。

 

 

2、使用数据库连接池

目前存在多个开源的java数据库连接池(本文第二部分),这些连接池都是在java.sql基础上编写而成,其实都是对java.sql的封装;

注:此部分参考博客:https://www.cnblogs.com/sandea/p/4213538.html

六、分别列出几种连接池的编码例子

可依然参考此博客:https://www.cnblogs.com/sandea/p/4213538.html

 

 

 

 

======以下于你或许是个好消息======

 

好消息就是:欢迎访问下面的博客网站哈哈哈......

 

网站名称:Java学习笔记网  (点击进入)

url:https://www.javaxxbj.com/ (点击进入)

网站特点:

  1. java主要网站的导航目录
  2. 你可以记录自己的博客,并可以控制显示和隐藏,可利于管理啦!!!
  3. 可以添加收藏各个网站的链接!!!
  4. 甚至也可以文章收藏,点赞,关注,查看我的消息等功能哦!!1

看一小点点的截图:

或可一试哦!

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值