理解JDBC
jdbc本质上是java官方定义的一组接口(Drive/Connect/Statement/ResultSet等),然后让各个数据库厂商去向用户提供各自的接口实现类,这些接口规定了一种行为——java语言如何操作数据库实例。用户可以基于这套接口去面向接口编程,作为用户的程序员只需要注册相应的驱动即可。
而一个JDBC打开的连接,最终也会映射为一条数据库连接(mysql客户端与mysql服务器之间建立的TCP连接)
JDBC流程
JDBC的流程可以概括为:
【1】注册数据库驱动
【2】拿到连接connect对象
【3】拿到执行sql语句的statement对象
【4】执行sql语句得到结果集resultSet对象
Class.forName("com.mysql.cj.jdbc.Driver");
Connection root = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?useSSL=false", "root", "123456");
String sql ="select * from user";
Statement statement = root.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
statement.close();
root.close();
获取connect对象的方式有两种,一种是直接new对应的Driver对象,然后使用driver对象的connect方法去获得,而另一种更加常用的方式是使用DriverManager的静态方法getConnection去获取
注册驱动原理
注册注册,听着很玄乎,其实说白了就是driverManager这个类维护了一个集合,这个集合装载的是Driver对象(DriverInfo是对Driver的封装,内部组合了DrIver对象,内部还维护了一个DriverAction类型,可以指定取消注册的逻辑)。而注册说白了就是往这个容器中添加Driver的过程
private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();
当我们forName主动将一个类加载如内存,就会触发类初始化,执行该类的static块。这个块内执行的逻辑其实就是new一个对象,然后注册进driverManager的Driver集合中。
static {
try {
DriverManager.registerDriver(new