首页 技术 正文
技术 2022年11月6日
0 收藏 909 点赞 334 浏览 912 个字

上次面试别人问我jdbc的过程:

我是这样回答的:

  Class.forName加载驱动

  DriverManager.connect(url,username, password)获取连接对象

  conn获取statement或者prepareStatement对象进行sql操作

  关闭连接

后面在Class.forName这里把我问死了。

他问Class.forName是如何加载驱动的呢?Class.forName方法的作用是什么呢?我回答是得到Class对象。问那怎么装载的驱动对象呢?我产生怀疑了,我说可能得到的是Object对象。他说是吗?我说可能,但是还是觉得Class.forName是获取Class对象。然后就问我如何获取一个对象,我说new 、反射的newInstance方法、(还有反序列化、clone)。如何得到Class对象呢?我回答的是obj.getClass()方法、类名.class. Class.forName.

就是Class.forName这里如何加载了驱动把我搞死了。弄得我迷糊将Class.forName是否得到Class对象混乱了。忽略了Class.forName有一个装载类对象的作用。装载就包括了初始化的操作。

Driven中的代码:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
} static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}

JDBC规范要求Driver类在使用前必须向DriverManger注册自己。注册过程在Driver类的静态类已经实现。也就是说只要类被加载,就完成了向驱动管理器的注册。

参考链接:https://blog.csdn.net/huscker/article/details/53080489

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,997
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,356
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,139
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848