JDBC驱动加载机制

本文详细探讨了JDBC驱动的加载过程,从jdbc连接的步骤开始,解释了`Class.forName`在驱动加载中的作用,指出其实是由驱动类的静态初始化块完成驱动注册。随着JDBC 4.0的出现,可以通过SPI自动加载驱动,避免了手动调用`Class.forName`。同时,文章还解释了JDBC如何在存在多个驱动时区分不同的数据库连接,关键在于`DriverManager.getConnection`方法中的URL匹配机制。
摘要由CSDN通过智能技术生成

JDBC

说道JDBC我们写Java的程序员实在是太过熟悉了,如今的后端系统不论大小几乎都抹不开和数据库存在联系。

JDBC是一个连接数据库的Java API,包含了相关的接口和类。但是,他不提供针对具体数据库(MySQL、MS、Oracle)的实际操作,而只是提供了接口,以及调用框架。和具体数据库的直接交互由对应的驱动程序完成,比如mysql的mysql-connector、oracle的ojdbc、MS的sqljdbc等。

现在ORM框架火热流行,程序员需要关注的数据库交互更加少了,需要做的基本上就是配框架,写sql就好了。

所以,让我们先回顾一下jdbc的一般连接过程。

jdbc连接过程

1、加载JDBC驱动程序:

Class.forName("com.mysql.jdbc.Driver") ;   

2、提供JDBC连接的URL

String url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8

3、创建数据库的连接

    Connection con =    
             DriverManager.getConnection(url , username , password ) ;   

4、创建一个Statement

PreparedStatement pstmt = con.prepareStatement(sql) ;   

5、执行SQL语句

ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   

6、处理结果

     while(rs.next()){   
         //do something
     }  

7、关闭JDBC对象

Class.forName作用

我们都知道,也听了无数遍,驱动的加载是由Class.forName 方法完成的。

但是,让我们深究一下,Class.forName是JSE里面加载一个类到JVM内存的方法,为什么又会关联了JDBC的驱动加载逻辑呢?

如果是的话,那么其他和JDBC无关的类加载也会调用JDBC驱动加载的相关逻辑吗?

是不是觉得问题很大,是不是觉得如果是我们来说设计JSE也

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值