一、理解什么是数据源和连接池
数据源:数据的源头,需要设置数据库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/ (点击进入)
网站特点:
- java主要网站的导航目录
- 你可以记录自己的博客,并可以控制显示和隐藏,可利于管理啦!!!
- 可以添加收藏各个网站的链接!!!
- 甚至也可以文章收藏,点赞,关注,查看我的消息等功能哦!!1
看一小点点的截图:
或可一试哦!