JDBC规范与MySQL驱动的关系详解_jdbc和数据库驱动的关系-程序员宅基地

技术标签: mysql  jdbc  

jdbc规范与驱动的关系:类似接口和接口的实现类,通过驱动程序,java应用程序可与数据库进行通信。JDBC由一组java语言编写

的类和接口组成。

 

JDBC API : 提供了java应用程序到驱动管理器DriverManage的连接。

JDBC驱动程序API: 这支持驱动管理器DriverManager到数据库厂商提供的驱动程序的连接。

JDBC的核心组件:

  1. DriverManager: 这个类管理数据库驱动程序列表。使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序匹配。
  2. Driver: 这个接口处理与数据库服务器的通信,我们很少会直接与Driver对象进行交互。而是使用DriverManager对象来管理这种类型的对象。
  3. Connection: 该界面具有联系数据库的所有方法。连接对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。
  4. Statement: 使用从此接口创建的对象将SQL语句提交到数据库。除了存储过程之外,一切派生类还接受参数。
  5. ResultSet: 在使用Statement对象执行sql查询后,这些对象保存从数据库检索的数据,它作为一个迭代器,允许我们移动其数据。
  6. SQLException:此类处理数据库应用程序中发生的任何错误 。

 

 

一、mysql的com.mysql.jdbc.Driver(数据库厂商提供的驱动程序)这个类实现了java.sql.Driver接口,任何数据库提供商的驱动类都必须实现这个接口。

二、关于为什么要注册驱动?

1. 获取数据库连接:数据库连接的本质就是客户端维持了一个和远程MySQL服务器的一个tcp长连接,并在连接上维护了一些信息。

通过DriverManager.getConnection(url,root,root)获取数据库连接对象时,由于之前已经在DriverManager中注册了驱动类,所以会找到那个驱动类来连接数据库。

  1. DriverManager类:管理一组JDBC驱动程序的基本服务,这个类里都是静态方法,主要通过调用getConnection方法获取Connection对象。明确每个驱动程序都要实现Driver接口,并且明确在加载某一Driver类时,它应该创建自己的实例并向DriverManager注册该实例。

 

  1. JDBC连接数据库的步骤:
  1. 先导入数据库驱动jar包
  2. 注册驱动

Class.forName(com.mysql.jdbc.Driver); //java反射机制

  1. 创建一个连接对象

Connection conn = DriverManager.getConnection(jdbc:mysql://

localhost:3306/mydb,root,root);

  1. 创建一个sql语句的发送命令对象

Statement stmt = conn.createStatement();

  1. 执行sql,拿到查询的结果集对象

ResultSet rs = stmt.executeQuery(select * from stu);

  1. 输出结果集的数据

while(rs.next()){

system.out.println(rs.getInt(id) + : + rs.getString(name));

}

  1. 关闭连接、命令对象以及结果集

rs.close();

stmt.close();

conn.close();

 

数据库驱动源码分析:

连接数据库时

//连接mysql时装载的驱动类以及连接连接字符串

Class.ForName(“com.mysql.jdbc.Driver”);

//只有注册了数据库驱动到DriverManager上才能通过DriverManager的getConnection方法去连接到此数据库

DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”,”root”,”123”);

class.forname() 装载指定的类,并执行静态代码块。

com.mysql.jdbc.Driver类的作用:

找到com.mysql.jdbc中Driver类:

package com.mysql.jdbc;  

import java.sql.SQLException;  

public class Driver extends NonRegisteringDriver implements java.sql.Driver {  

//用Class.ForName() 加载该类时就会执行该静态代码块,即注册 驱动

    static {  

        try {  

            java.sql.DriverManager.registerDriver(new Driver());

        } catch (SQLException E) {  

            throw new RuntimeException("Can't register driver!");  

        }  

    }  

    // Constructors  

    //Construct a new driver and register it with DriverManager

    public Driver() throws SQLException {  

    // Required for Class.forName().newInstance()  

    }  

}  

 

这个driver类必须向drivermanager注册自己

java.sql.DriverManager.registerDriver(new Driver())

DriverManager.registerDriver()这个方法,源码如下:

//静态同步方法

public static synchronized void registerDriver(java.sql.Driver driver)  

    throws SQLException {  

    if (!initialized) {  

        initialize();  

}    

//创建一个驱动信息实例,用于存储驱动信息

DriverInfo di = new DriverInfo();  

//调用getClass()等方法获得驱动(这是数据库厂商提供的驱动) 的类名包名等信息,然后赋值给di的属性。

    di.driver = driver;  

    di.driverClass = driver.getClass();  

    di.driverClassName = di.driverClass.getName();  

// Not Required -- drivers.addElement(di);  

//将驱动的信息添加到一个集合保存,后面获得连接时会用到

    writeDrivers.addElement(di);   

    println("registerDriver: " + di);  

    /* update the read copy of drivers vector */  

    readDrivers = (java.util.Vector) writeDrivers.clone();  

}  

三、com.mysql.jdbc.Driver.connect 是如何建立连接返回数据库连接对象的?

创建了一个MySQL的数据库连接对象。传入host,port,database等连接信息,在com.mysql.jdbc.Connection的构造方法里有个createNewIO()方法。主要有两个作用:1. 建立和MySQLServer的socket连接,2. 连接成功后,进行登录校验,发送用户名。密码,当前数据库连接默认数据库名。

 

  • 创建preparedStatement,设置参数

创建数据库连接之后,通过preparedStatement(sql)来获取SQL执行环境ps,是根据需要编译的SQL语句和connection连接对象来创建一个JDBC4PreparedStatement对象。也就是SQL的执行环境。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42650977/article/details/82594232

智能推荐

1024 分辨率下最快模型,字节跳动文生图开放模型 SDXL-Lightning 发布_sdxllightning下载-程序员宅基地

文章浏览阅读1k次,点赞28次,收藏25次。很高兴跟大家分享我们最新的文生图模型 —— SDXL-Lightning,它实现了前所未有的速度和质量,并且已经向社区开放。_sdxllightning下载

关于cloacked-pixel的一些总结_03-cloacked-pixel-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏2次。前两天遇到一道lsb隐写的题目,需要用到cloacked-pixel这个脚本。工具地址下载后解压即可,这里需要注意,该脚本是基于python2的!但我电脑anaconda里面只有python3并没有很好的python基础,但借助anaconda可以轻松解决很多问题!教程如下:anaconda中添加python2但是在运行脚本时还会提示缺库(注意运行时要activate pythonXX手动切换到你所配置的python2环境下)继续使用anaconda为python2装缺少的._03-cloacked-pixel

WPF DataGrid添加右键菜单-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏2次。原文http://home.cnblogs.com/group/topic/54788.html用代码添加:View Code <DataGrid.ContextMenu> <ContextMenu Name="dgmenu1" StaysOpen="true"> &..._wpf datagrid右键菜单

EB Tresos Studio离线激活方法_ebtresos离线激活-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏6次。EB Tresos Studio离线激活方法_ebtresos离线激活

B端系统-权限管理_如何将后台管理系统b端化-程序员宅基地

文章浏览阅读95次。当然用户组是可以拓展的,部门和职位常用在内部的管理系统,如果是面向c端的系统,比如淘宝网的商家,商家自身也有一套组织架构,如采购部,销售部,客服部,后勤部,有些人拥有客服权限,有些人拥有上架权限等,这就体现了用户组的扩展性。关于数据权限的处理,常见的有两种方式,一种是在角色内完成数据权限的定义,另一种是将角色和权限分开,两种方式各有偏重。即页面的功能按钮,包括查看,新增,修改,删除,审核等,用户点击删除按钮时,后台会校验用户角色下用户的所有权限是否包含该删除权限,如果是,就可以下一步,反之提示无权限。_如何将后台管理系统b端化

音乐节拍提取一-程序员宅基地

文章浏览阅读601次。前段时间倒腾了一下音乐节拍数检测,参考下面的网上的一个测试歌曲列表做了下对比,效果还不错,基本上都是准的。Itunes LinkNameTimeArtistBPMAlbumGenreAmazon LinkLoneliest Soul03:35Grace Potter and the Nocturnals168The Lion The Bea..._提取音乐节奏

随便推点

win11实时字幕无法下载问题_微软实时字幕下载不了-程序员宅基地

文章浏览阅读776次。一直卡着的话直接去Microsoft Store下载这个试试看。_微软实时字幕下载不了

如何让谷歌Chrome地址栏恢复显示“www”和“https://”标识符_chrome 地址显示原始-程序员宅基地

文章浏览阅读1.1w次。如何让谷歌Chrome地址栏恢复显示“www”和“https://”标识符地址栏隐藏“www”和“https://”标识符  谷歌 Chrome 现在默认在所有网站地址栏中少了一些内容,“www”子域和“https://”被隐藏起来了,因为谷歌认为这些不是大多数人要关注的信息。  Chrome 的产品经理 Emily Schechter 说,他们将开始从桌面版和 Android 版的第..._chrome 地址显示原始

目标跟踪数据集整理(四)----TColor-128(Temple Color 128)_encoding color information for visual tracking: al-程序员宅基地

文章浏览阅读3.5k次。文章目录Encoding Color Information for Visual Tracking:Algorithms and Benchmark 2015官网 下载数据集(4.4G)本文认为颜色信息可以提供丰富的判别线索对于视觉推理,大多数现代视觉跟踪器限制在灰度域。(也就是主要解决输入序列是灰度版本)因此我们在算法和基准两方面做了系统的研究,证明了颜色信息可以帮助提升视觉跟踪效果。..._encoding color information for visual tracking: algorithms and benchmark

论文解读--Visual Lane Tracking and Prediction for Autonomous Vehicles-程序员宅基地

文章浏览阅读860次,点赞20次,收藏21次。我们提出了一种用于自动驾驶汽车跟踪水平道路车道标记位置的可视化方法。我们的方法是基于预测滤波的。预测步骤估计在每个新的图像帧中期望的车道标记位置。它也是基于汽车的运动学模型和嵌入式测程传感器产生的信息。使用适当准备的测试车辆获得的实验结果表明,在某些条件下,如振荡和变道,预测步骤可以显著地减少跟踪误差。因此,我们相信我们的方法应用于基于图像的控制自动驾驶汽车可以提高系统性能。

sap 标准委外和工序委外_委外加工SAP的两种典型委外处理方法-程序员宅基地

文章浏览阅读1.2k次。通常提供两种基本处理方式:外包采购和工序外包。生产外包经营方式简介生产外包作为一种全新的生产经营方式,改善了传统方式的不足,主要类型有:一.OEM:(OrignalEquipmentManufactuce->原始设备制造商)典型的OEM方式为:拥有原始设备的OEM加工方(受委托方)按照委托方的要求,用自己的设备为其加工生产产品,而后贴上委托方商标交货,整个活动中,加工方只获得加工费用,自..._工序委外加工属于什么变更类型

yolov3算法详解_2020年阿里-算法工程师面经-程序员宅基地

文章浏览阅读432次。写在前面:暑期实习从申请到拿到阿里意向书大概持续了1个月的时间,和周围其他同学比较,我的面试流程算走的比较快的了。还没有拿到意向书的朋友们也不要太着急,调整好心态好好准备(虽然内心多多少少会有些焦虑),阿里走流程算是比较快的了。希望能对求职的你有所帮助。【阿里云1面(算法实习生)】1、自我介绍、项目介绍2、死锁出现的原因以及如何避免雾夜飞鹰:死锁产生的原因及四个必要条件​zhuanlan.zhih..._yolo模型的时间复杂度