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也