JDBC规范与MySQL驱动的关系详解
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的sql.jdbc.Driver(数据库⼚商提供的驱动程序)这个类实现了java.sql.Driver接⼝,任何数据库提供商的驱动类都必须实现这个接⼝。
⼆、关于为什么要注册驱动?
1. 获取数据库连接:数据库连接的本质就是客户端维持了⼀个和远程MySQL服务器的⼀个tcp长连接,并在连接上维护了⼀些信息。
通过Connection(url,”root”,”root”)获取数据库连接对象时,由于之前已经在DriverManager中注册了驱动类,所以会到那个驱动类来连接数据库。
1. DriverManager类:管理⼀组JDBC驱动程序的基本服务,这个类⾥都是静态⽅法,主要通过调⽤getConnection⽅法获取
Connection对象。明确每个驱动程序都要实现Driver接⼝,并且明确在加载某⼀Driver类时,它应该创建⾃⼰的实例并向
DriverManager注册该实例。
1. JDBC连接数据库的步骤:
1. 先导⼊数据库驱动jar包
2. 注册驱动
Class.forName(“sql.jdbc.Driver”); //java反射机制
1. 创建⼀个连接对象
Connection conn = Connection(“jdbc:mysql://
localhost:3306/mydb”,”root”,”root”);
1. 创建⼀个sql语句的发送命令对象
Statement stmt = ateStatement();
1. 执⾏sql,拿到查询的结果集对象
ResultSet rs = uteQuery(“select * from stu”);
1. 输出结果集的数据
()){
system.out.Int(“id) + “:” + rs.getString(“name”));
}
1. 关闭连接、命令对象以及结果集
rs.close();
stmt.close();
conn.close();
数据库驱动源码分析:
连接数据库时
//连接mysql时装载的驱动类以及连接连接字符串
Class.ForName(“sql.jdbc.Driver”);
/
/只有注册了数据库驱动到DriverManager上才能通过DriverManager的getConnection⽅法去连接到此数据库Connection(“jdbc:mysql://localhost:3306/test”,”root”,”123”);
class.forname() 装载指定的类,并执⾏静态代码块。
到sql.jdbc中Driver类:
sql.jdbc;
import java.sql.SQLException;
mysql下载jar包public class Driver extends NonRegisteringDriver implements java.sql.Driver {
//⽤Class.ForName() 加载该类时就会执⾏该静态代码块,即注册驱动
static {
try {
java.isterDriver(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.isterDriver(new Driver())
//静态同步⽅法
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 = Class();
di.driverClassName = Name();
// Not Required -- drivers.addElement(di);
//将驱动的信息添加到⼀个集合保存,后⾯获得连接时会⽤到
writeDrivers.addElement(di);
println("registerDriver: " + di);
/* update the read copy of drivers vector */
readDrivers = (java.util.Vector) writeDrivers.clone();
}
三、sql.t 是如何建⽴连接返回数据库连接对象的?
创建了⼀个MySQL的数据库连接对象。传⼊host,port,database等连接信息,在sql.jdbc.Co
nnection的构造⽅法⾥有个createNewIO()⽅法。主要有两个作⽤:1. 建⽴和MySQLServer的socket连接,2. 连接成功后,进⾏登录校验,发送⽤户名。密码,当前数据库连接默认数据库名。
创建preparedStatement,设置参数
创建数据库连接之后,通过preparedStatement(sql)来获取SQL执⾏环境ps,是根据需要编译的SQL语句和connection连接对象来创建⼀个JDBC4PreparedStatement对象。也就是SQL的执⾏环境。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。