上次面试别人问我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

jdbc中Class.forName(driverName)的作用的更多相关文章

  1. 关于JDBC中Class.forName的疑惑

    一直以来都不知道为什么执行了 Class.forName(); 之后,通过DriverManager.getConnection(); 就可以获取相关数据库的连接Connection的实现呢?今天看了 ...

  2. jdbc 中 excute executeUpdate的用法作用

    Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 方法execut ...

  3. Java中Class.forName()的作用(转载)

    http://www.360doc.com/content/10/0712/10/1720440_38421273.shtml# 使用jdbc方式连接数据库时会使用一句代码Class.forName( ...

  4. SPI在JDBC中的运用

    前言 之前学习了JDK SPI的机制,本文专门讨论2个内容: 1.为什么在使用SPI后,不需要Class.forName()了? 2.SPI在JDBC中的运用. JDBC模板代码 private st ...

  5. JDBC中连接MySQL数据库

    package qddx.JDBC; import java.sql.*; public class JDBC_Connection { static String driverName = &quo ...

  6. 在JDBC中使用Java8的日期LocalDate、LocalDateTime

    在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等字段 但是 ...

  7. 使用JDBC中的出现的乱码和查询无结果问题

    使用JDBC中的问题 连接的后出现查询结果是乱码. 1.可能是代码的编码与数据库的编码不同 ​ 有可以将二者都设置为UTF-8 2.如果比较懒得话可以只设代码为UTF-8 mysql 连接url中us ...

  8. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

  9. JDBC中常用对象介绍

    JDBC中的主要类(接口) 在JDBC中常用的类有: 1.DriverManager 2.Connection 3.Statement 4.ResultSet 1.DriverManager 其实我们 ...

随机推荐

  1. English trip V1 - B 19. Life of Confucius 孔子的生活 Teacher:Patrick Key:

    In this lesson you will learn to describe a daily routine. (日常生活) 课上内容(Lesson) 词汇(Key Word ) contrac ...

  2. Jumpserver3.0部署(Centos6.x)

    1.jumpserver基础环境准备[root@jumpserver ~]# yum -y install epel-release[root@jumpserver ~]# yum clean all ...

  3. Android的组件化和模块化

    Android随着业务的增多,而且后续新的需求的增加,代码的修改会变得非常频繁 然后最近在看组件化和模块化 公司的业务没有那么大,所以这种方式我并没有采取 但是还是需要了解下他的使用机制 还有优缺点之 ...

  4. Confluence 6 空间权限概述

    在 Confluence 中的每一个空间都会有自己的权限,这个权限可以被空间的管理员进行调整,也可以被空间管理员取消.当用户创建一个空间的时候,例如用户创建一个你的个人空间,创建控件的这个用户将会被自 ...

  5. http bass

    1.http 是超文本传输协议,是从万维网服务器传输超文本到本地浏览器的传输协议 2.http是一个基于tcp/ip通信协议来传输数据(html,图片,查询结果等) 3.一个完整的http请求包含7个 ...

  6. 在线linux 平台

    1.http://www.shiyanlou.com/[实验楼] 2.http://bellard.org/jslinux/[大牛平台]

  7. 求[1,n]中与m互素的个数

    void dfs(int d, ll num, int z) { if (d>cnt) { if (num!=1) ans+=z*n/num; } else { dfs(d+1,num*p[d] ...

  8. JIT编译器技术理解

    参考链接: https://blog.csdn.net/liaodehong/article/details/51605457 https://www.cnblogs.com/insistence/p ...

  9. 【微信公众号开发】【8】网页授权获取用户基本信息(OAuth 2.0)

    前言: 1,在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名. 请注意,这 ...

  10. nyoj-1015-二分图判定

    二部图 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 二部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图是不是二部图.证 ...