dbeaver连接mysql 驱动jar_JDBC工具类dbutils&&JDBC连接池

+

1.1概念及访问

其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。我们访问数据库可以通过数据库管理软件比如Navicat..,今天是通过Java代码.但是首先都需要连接上数据库(使用账号,密码,以及想连接哪个数据库..)

1.2数据库连接池的好处

  1. 节约资源
  2. 用户访问高效

1.3实现:

标准接口:DataSource javax.sql包下的。方法:

  • 获取连接:getConnection()
  • 归还连接:Connection.close()。
如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接。

1.4实践

这篇文章我想从面向过程逐渐过渡到面向对象,通过代码一点一点的改变,感受一下从执行者变成指挥者的感觉。文章有点粗糙,如果你能手动敲完这几个版本,那么你的收获会很大!


先铺垫点前驱知识:

MySQL驱动(driver):对JDBC接口的实现,用来操作MySQL数据库!!

JDBC的操作步骤:
  1. 加载数据库驱动程序
  2. 连接数据库
  3. 操作数据库
  4. 关闭数据库
在Java中使用JDBC,需要按照以下的模型来编码:
  1. bean------数据模型
  2. Dao-----数据库操作功能封装层,定义接口以及接口实现类
  3. util-----数据库配置层,用来连接数据库

第一个版本

从第一个版本到第三个版本都需要使用到mysql-connector-java-5.1.45-bin.jar这个jar包,步骤是创建跟src同级目录lib。导入上述jar包,并添加到构建路径。如果不会添加构建路径,请移步查看:

https://zhuanlan.zhihu.com/p/112799688​zhuanlan.zhihu.com

滨少:JDBC原生

滨少:JDBC原生​zhuanlan.zhihu.com

这里介绍1.0版本,首先是util配置层,注意一点!!!第10行的驱动路径,就是mysql.jdbc包下的Driver类,不是随便写的!配置过程是:

  • 1定义连接数据库所需的数据值
  • 2.加载驱动类
  • 3.获取数据库连接对象。
这个过程中规中矩没有什么坑点。需要特别注意的是 中间需要导包,导入的是Connection.sql下的包,导入其他的包就会报错,让你强转类型。

接下来是dao层的接口,这里接口定义了增删改查四个方法。

接下来是dao层中的实现类,它是实现了接口并对方法重写,大家认真看实现类图中的红色框框,发现,这里的sql语句写死了,就是说我现在一个方法只能执行一条特定的代码,这代码显然不可用。而且此时查询方法查出来的数据是单一的,他们不是一个学生对象。这就是1.0版本,相信大家对连接池的运行过程有一定的了解。下面的2.0版本会对学生对象进行封装。

工具类

5f2b78c55fbf623fb2ab93c9d0a0966d.png
第10行的驱动路径,就是mysql.jdbc包下的Driver类,不是随便写的!

滨少:JDBC原生

5f2b78c55fbf623fb2ab93c9d0a0966d.png
第10行的驱动路径,就是mysql.jdbc包下的Driver类,不是随便写的!
用于增删改查的接口

021dd789e7ddb0d3a69adee012c9c1fa.png
上面接口的实现类

e7ac5b5e0b73a977d4031bbdd88318f0.png

3fd2f7049bf4d8b96ad9b3010aabba4d.png

第二个版本

第二个版本的util层跟1.0版本的一样,看上面的即可(减少阅读负担)。

通过这个版本可以看出这个版本解决了sql命令固定的问题,这下执行的命令和条件就是由自己输入。这里的?占位符号,这里占位符号下面需要替换问号。还有封装了学生对象,查询时输出的就是一个个学生对象,对应数据库中的一条条记录。可能大家觉得这很nice了。但是2.0版本还是可以优化的,大家可以看一下几个方法重复的打码挺多的,例如ResultSet,Statement,Connection对象的关闭,这些close方法可以封装优化。还有获取connection(数据库连接对象),获取执行sql命令的statement,执行命令是否也是一样呢。看到这,又能封装了,干的漂亮,我们来看3.0版本。

接口

854f408a69a2eb62c0e1553fcb951229.png
学生类(JavaBean)

3e31556ce65568efa13083f2b7cbdae4.png
这里bean层的学生类就截图成员变量,下面的构造方法,get,set方法,toString方法自己脑补哈哈哈。
接口实现类

efc109ba0882befdf56fef97cf1b25ea.png

2419002bde9a5bb1a0960a9c6f97be08.png

0e07ede3aaace029bc106704406e3874.png

第三个版本

第一个改变的地方就是在util中新定义了三个需要关闭的变量这里框中设成私有为了安全,静态为了类名能直接调用,但是别加final,用了final成自定义常量,下面就用不了刚开始置为空,在封装的close方法中只要不是null说明用过了就可以关闭。

第二个改变的是我们发现增删改的代码是差不多的可以封装成一个方法,差距就在于增删改根据条件的不同,问号的数量不同罢了。所以我们引入了可变参数,这里不知道可变参数的可以自行百度完,在回看文章,可变参数也叫可变数组,所以我们遍历数组查看是否有参数,有参数就进行替换。替换时需要注意的是遍历的是个数组,所以下标从0开始,在替换问号,替换的是第几个问号,没有第0个问号这一说吧。所以替换方法中第一个参数是i+1.这么一看是不是更猛了。不禁感叹前辈们的大脑装的是啥,Java之父牛逼!就这?还没有结束,接下来上我们的终极版本!

工具类

a79aa0ca2f38ecbf042c854f6da9306a.png
这里框中设成私有为了安全,静态为了类名能直接调用,但是别加final,用了final成自定义常量了,下面就用不了

92e217f452558253fa930f7bd3cfb917.png

292474954937d06a1410aaf2a96c5182.png

9eb7c02fd6ad0ca57c8cd2127a57745f.png

d2beb2b7c6a64cc0f72f76f5ef1bda6d.png

终极版本

在使用第四个版本之前需要使用到一个第三方的工具包:commons-dbutils-1.7.jar这个可以去官网下载。我先自己传一个到网盘哈哈哈。找不到的可以评论留言找我拿。

第一个改变的地方就是在util中新定义了三个需要关闭的变量,这里框中设成私有为了安全,静态为了类名能直接调用,但是别加final,用了final成自定义常量了,下面就用不了刚开始置为空,在封装的close方法中只要不是null说明用过了就可以关闭。

第二个改变的是我们发现增删改的代码是差不多的可以封装成一个方法,差距就在于增删改根据条件的不同,问号的数量不同罢了。所以我们引入了可变参数,这里不知道可变参数的可以自行百度完,在回看文章,可变参数也叫可变数组,所以我们遍历数组查看是否有参数,有参数就进行替换。替换时需要注意的是遍历的是个数组,所以下标从0开始,在替换问号,替换的是第几个问号,没有第0个问号这一说吧。所以替换方法中第一个参数是i+1.这么一看是不是更猛了。不禁感叹前辈们的大脑多么猛,Java之父牛逼!就这?还没有结束,接下来上我们的终极版本!

工具类

64cb478e2a032c898e00176805085919.png
接口

66431dea2a2c57e0153bd17babd69547.png
实现类

db76dd36b207689794d57b06769c2ac1.png

a908eb8562da4677653d50977c5ae100.png

终极版的改变在于引入的第三方工具包的强大,这一次我们的util层特别的简单,不在定义变量而是直接传入。还新建了方法返回线程池,接下来重点在实现方法时,可以看到我反复在框一条代码。

QueryRunner queryRunner = new QueryRunner(DBCPUtil.getDataSource());

重点就在这了,这个类是jar包中的类,这个jar包来自阿帕奇。这个类创建时需要传入一个数据库连接池对象。这里我们在DBCPUtil类中已经有返回连接池对象了,为什么要单独一个方法返回数据库连接池对象,因为定义时,数据库连接池是静态私有的,只有本类才能使用,所以用方法返回出去,使得dao层的实现类可以使用。创建的这个对象他是用来执行sql命令的,通过调用方法update这个方法完成一系列操作,比如分配Connection对象都是由这来执行的。

c61e185610aa94ff17cce5f6f0091ca3.png
前面放sql,后面的看需要来选方法

update和query,在该包中,增删改所用的方法都是update,与查询有关的都用query方法。

我猜测终极版本的代码底层应该也是类似于3.0版本的封装方法。

2020.4.20补充:mysql在于应用进行连接时需要使用mysql的驱动包mysql-connector-java-5.1.45-bin.jar。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值