本文以java连接mysql为例讲解;仅仅记录了一部分知识点,其余我还没学完,后面会补充!初学JDBC文章仅仅是我个人对知识点的理解,请谨慎参考!
目录
对JDBC的进一步理解:
JDBC是一套接口(面向接口写实现类,能够解耦合,提高代码的扩展力)是由Java语言编写的一堆接口和一些class类组成的一套工具类的程序。它仅仅是一套规范。也就是说JDBC并不能直接连接和操作数据库,真正连接和操作数据库的,是各大数据库服务商按照JDBC这套规范写出来的驱动Jar包,JDBC和驱动包的关系,就是接口与实现类的关系。
JDBC程序步骤:
- 注册驱动(JDK6后会自动注册,可忽略该步骤);
- 通过
DriverManager
获得Connection
对象(创建连接); - 通过
Connection
获得PreparedStatement
获取数据库操作对象; - 设置
PreparedStatement
的参数,也就是编写sql语句; - 执行保存操作,调用 preparedStatement.execute();
- 释放资源,包括
Connection
、PreparedStatement
。
注册驱动类底层剖析:
String driverName = "com.mysql.cj.jdbc.Driver";
//2.实例化Driver
Class clazz = Class.forName(driverName);
Driver driver = (Driver) clazz.newInstance();
//3.注册驱动
DriverManager.registerDriver(driver);
实例化mysql驱动(com.mysql.cj.jdbc.Driver)的时候,会通过 DriverManager.registerDriver 方法来注册驱动。其底层实现是,将mysql驱动中的Driver 对象包装为 DriverInfo(驱动程序信息),存储在一个专门存放DriverInfo的DriverManager.registeredDrivers 集合中。
建立连接底层剖析:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test");
使用 DriverManager.getConnection 方法来建立与 MySQL 服务器的连接。其底层实现是,通过信息"jdbc:mysql://localhost:3306/test"遍历DriverManager.registeredDrivers 集合(存放DriverInfo(驱动程序信息))通过协议匹配已注册的数据库驱动,如果存在对应驱动就创建连接;这里是 com.mysql.cj.jdbc.Driver 实例。
for(DriverInfo aDriver : registeredDrivers) { // 遍历已注册的数据库驱动
if(isDriverAllowed(aDriver.driver, callerCL)) {
try {
println(" trying " + aDriver.driver.getClass().getName());
Connection con = aDriver.driver.connect(url, info); //建立数据库连接返回连接对象
if (con != null) {
// Success!
println("getConnection returning " + aDriver.driver.getClass().getName());
return (con);
}
} catch (SQLException ex) {
if (reason == null) {
reason = ex;
}
}
} else {
println(" skipping: " + aDriver.getClass().getName());
}
}
几个重要的类:
类名 | 作用 |
---|---|
DriverManager | 驱动管理器,用于注册驱动,是获取 Connection 对象的入口 |
Driver | 数据库驱动,用于获取Connection 对象 |
Connection | 数据库连接,用于获取Statement 对象、管理事务 |
Statement | sql执行器,用于执行sql |
ResultSet | 结果集,用于封装和操作查询结果 |
prepareCall | 用于调用存储过程 |