问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

彻底搞懂JDBC的运行过程

发布网友 发布时间:2022-10-01 02:28

我来回答

1个回答

热心网友 时间:2024-11-25 10:44

前几天笔者发布了博客,手写mybatis彻底搞懂框架原理。为了帮助初学者更好理解mybatis框架,这次讲解一下Java的JDBC的运行过程。

JDBC的作用

JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库。JDBC接口及相关类在java.sql包和javax.sql包里。我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。

JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。

JDBC的连接步骤

执行一次JDBC连接,分六个步骤进行:

1. 导入包

在程序中包含数据库编程所需的JDBC类。大多数情况下,使用 import java.sql.* 就足够了

2. 注册JDBC驱动程序

需要初始化驱动程序,这样就可以打开与数据库的通信。

3. 打开一个连接

使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接。

4. 执行一个查询

需要使用一个类型为Statement或PreparedStatement的对象(两者区别看后文),并提交一个SQL语句到数据库执行查询。

5. 从结果集中提取数据

这一步中演示如何从数据库中获取查询结果的数据。使用ResultSet.getXXX()方法来检索的数据结果

6. 清理环境资源

在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费。本文使用了try with resources方式关闭资源,这是JDK7的语法糖,读者可自行搜索。

完整代码如下。

JDBC的最佳实践

JDBC是如何实现Java程序和JDBC驱动的松耦合?

JDBC API使用Java的反射机制来实现Java程序和JDBC驱动的松耦合。看一下上文的JDBC示例,你会发现所有操作都是通过JDBC接口完成的,而驱动只有在通过Class.forName反射机制来加载的时候才会出现。

这是Java核心库里反射机制的最佳实践之一,它使得应用程序和驱动程序之间进行了隔离,让迁移数据库的工作变得更简单。

Statement和PreparedStatement区别

预编译

创建时的区别:

执行时的区别:

由上可以看出,PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少次,都不会再去进行编译,而Statement 不同,如果执行多次,则相应的就要编译多少次sql,所以从这点看,PreparedStatement的效率会比Statement要高一些。PreparedStatement是预编译的,所以可以有效的防止SQL注入等问题

占位符

PrepareStatement可以替换变量在SQL语句中可以包含?,可以用?替换成变量。

而Statement只能用字符串拼接。

JDBC的ResultSet

在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。

ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。

默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet,像下面这样。

当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。

可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。

ResultSet的不同类型

根据创建Statement时输入参数的不同,会对应不同类型的ResultSet。如果你看下Connection的方法,你会发现createStatement和prepareStatement方法重载了,以支持不同的ResultSet和并发类型。

ResultSet对象有三种类型。

ResultSet有两种并发类型。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 梦到家族已故长辈死了大家披麻戴孝和几 水稻种植的病虫害 水稻有哪些病虫害,分别如何防治 兆字怎么读 女人要和忽冷忽热的男人分手 男人说对不起我爱你 我错了是什么意思? 肖敏我爱你的藏头诗 我说我爱你,她说我不爱你!我怎么回答? 繁体字爱你我错了吗怎么写 现代途胜U盘下载视频和MV支持什么格式的视频 图音dvd导航 视频格式,途胜装的图音DVD导航,用SD卡下载的MP4(P2P下载... 梦见一群猫头鹰飞到我家,寓意什么意思 早安的清晨心语 洛克王国如何打赢翼系精灵王? 《有种爱情叫金钱》txt下载在线阅读全文,求百度网盘云资源 洛克王国水系精灵王最终进化道具,求打法 郑恺在《有种你爱我》里面唱那首英文歌,最后一句是 nobody care who... 求 有种你爱我 百度网盘免费资源链接,谢谢 我梦见自己捡到四盆花,其中有一盆红色的花,求解 アルミナ怎么读 谁有网王中dream+believer+的歌词和发音拜托各位了 3Q 联想Thinkpad e430和 e430c,哪个比较好? ThinkPad E430C(33651H1) 14英寸笔记本电脑怎么样? 微信群聊怎么拍一拍 具体怎么使用 百度做活动是穿的衣服哪有?怎么才能得到? 百度上的衣服怎么买 带有百度标志的衣服去哪里买 请问百度画报上的衣服怎么买? 百度商城的衣服可以从哪里买啊 如何放松全身 我要得到你 我要得到你就像愚公移山一样不放弃 这个歌的名字是什么啊... 羽绒服粘了油渍洗不掉怎么办 羽绒服粘了油渍洗不掉怎么解决_百度... 无锡在哪里在哪个省份 无锡在哪个位置 5D2拍视频时浅景深问题 SONYHX100拍视频如何实现浅景深 含硒的水果有哪些? 含硒的水果排名 去年的国庆节是农历多少 人生至理的名句 冰箱正常的冷藏和冷冻的温度是多少 面筋麻花的做法和配方 面筋麻花怎样做好吃