最熟悉的陌生人JDBC

贺贺学编程

共 2175字,需浏览 5分钟

 · 2022-01-05

大家好,我是贺贺,专注于Java后端、数据结构和算法的学习。

为什么JDBC慢慢变陌生了

在Java开发过程中,与数据库打交道是难免的,但是,Java具体是怎么操作数据库的呢,随着Spring时代的来临,我们大部分的程序员可能只需要引入一个依赖,简单写几句配置文件,通过MyBatis等其他框架就可以操作数据库了。慢慢的我们好像对这个最有功的人JDBC陌生了,我记得刚开始学Java的时候,感觉JDBC真的太神奇了,竟然可以通过Java操作数据库。直到后来,有人问我还记得怎么创建Connection对象吗,我忽然一下子好像意识到,我在前进的过程中,好像丢掉了一些东西。

80422b8fd7e31a8ebb2365548f3b8abd.webp

我眼中的王者JDBC

第一个Java项目是在大学做的,好像是大二暑假,那会自学Java,做了一个图书管理系统,当时要用数据库,我记得自己学过Oracle,但是听说写Java项目要用MySQL,所以就跟风用MySQL,不管是哪个数据库,大家都在说JDBC,后来才知道,JDBC既可以连接Oracle又可以连接MySQL,他就像一个中介一样。当我们要连接MySQL的时候,我们只需要用JDBC-MySQL的驱动就行了。我有时会想,世界上这么多数据库,Java怎么能一个个都去适配呢,后来发现,不是Java适配数据库,而是数据库来适配的Java,例如MySQL的驱动就是MySQL官网下载的,这也侧面看出Java的生态,同时也能让我们联想到,丰富自己比迎合别人更重要。

e9751f8e8c5bd98dc9ceff720806e0e0.webp

旧事重提,再会JDBC

现在让我凭空想象原生的Java怎么操作数据库,我都不敢保证我能写出来,下面这些内容呢,也是我参考了一些书籍,然后自己总结而来的,一句话形容自己,记性不好 忘性不差。
连接数据库
在开工之前,先去MySQL官网下载驱动,下载完之后,别忘了引入到项目中,当准备工作做完之后,就可以进行连接了。

835b8bf8760f8a6bf3456745aa33b22c.webp
操作数据库
连接完成之后,我们就可以对数据库进行增删改查了,那么问题来了,我们怎么去操作数据库呢,换句话说就是,我们用什么来操作数据库呢,平时我们都是直接写SQL语句的,现在Java里面怎么写SQL呢,这个问题当然不用我们操心了,官方给了我们一个接口,这个接口,可以执行SQL语句,堪称完美。这个接口就是Statement接口。
如果我们要进行查询操作,那查询的结果放到哪呢,不用担心,官方也给我们准备好了,是一个ResultSet接口,我们直接用它来接收就可以了。
42c7fe5f2b3107f0c496128fcd639a4c.webp
经过这么一波操作,我们就成功的把数据库里的东西,查询出来,并放到Java对象中了,其实这是一个很复杂的操作,但是大部分都是Java官方给做了,所以我们看到的就是简单的使用,随着框架的诞生,我们程序员就更懒了,只需要专注于写SQL了,这些连接操作等都不用了,这样一来,开发效率是高了,好像也就开发效率高了,我们慢慢的都变水了,反正我是这样。补充:如果想要进行复杂的操作,其实本质上就是对你SQL的考察了,这里就不一一演示了。
3416859f99afae139b4da2725ba12b12.webp
升级版操作
我们应该还有印象,或者面试中偶尔会遇到,其实对数据库的操作,官方还给了一个接口,它就是PreparedStatement,这玩意呢,比Statement多了一个预处理。简单的说就是,该对象在向数据库发送SQL语句的时候,会做一个预处理,通过这个预处理,来减轻数据库的访问压力,这里的预处理是什么呢,首先我们需要知道数据库在执行SQL时,数据库的解释器会对SQL进行解释成数据库可以直接执行的命令,因为我们写的SQL语句其实可以简单的理解为是高级语言,而数据库本身是不能直接识别的,需要通过解释器解释之后才能识别。而这里Java提供的预处理就是做了这个解释的操作,这样一来就减轻了数据库的压力。为什么要减轻数据库的压力呢,把预处理放到Java层面,难道就不用时间了吗?当然要时间,但是这个时间是在编译的时候做的,也就是只要编译好了PreparedStatement对象,那么它就把SQL给解释成数据库可以直接执行的格式了,所以就减轻了数据库的压力,从而提高了效率。
26913a9d11d75aacf19894496c40a598.webp
另一方面,PreparedStatement可以防止SQL注入,因为Statement在执行的时候是一个字符串,而这个字符串可能会被恶意在后面的where语句里拼接一个or 1=1,这样就会导致SQL语句永真,而产生错误。如果通过预处理的方式,它的执行不是一整个字符串,而是进行set的操作,就避免了恶意拼接字符串。
6f3311107981e02053331e5e6672e4cb.webp
到目前为止呢,我们基本了解了,如何通过Java来操作数据库,其实呢,随着科技的发展,我们拥有了更多的花里胡哨,但是最初的东西,好像慢慢的离我们而去,可是我们不要忘记了,框架可以说,我们是学不完的,在我们埋头学习框架的时候,记得温习一直默默做出贡献的基础知识。
9ab3889968877b1a9c09e226ad661d38.webp

小安的故事

小安在大一加入了学生会——外联部,然后还加入了一个社团——ACM,他其实更喜欢外联部,因为在那里无忧无虑的,但是他却每天泡在ACM,可能这就是现实吧,小安在无聊的时候喜欢一个人去操作玩,他喜欢去听操场上别的社团在唱歌,他也喜欢街舞社团,可是他都没有加入。有一次,小安走到了街舞社团的门口,站了好久,最终还是没有进去。他不开心的时候就在宿舍里,带着耳机,自己唱歌,还好他的室友都能很好,能受得了他,要不然早把这个不合群的臭小子赶出去了。

浏览 50
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报