关于jdbc的连接方式#1
Connection conn;
Class.forName("com.mysql.jdbc.Driver"); //2
conn=DriverManager.getConnection("jdbc:mysql://master/shao", USER, PASSWD);

关于java类加载的补充
1.java的类是动态加载的,加载一个类发生在访问类的静态成员,静态方法(构造函数隐式静态的)
2.Class对象:
类是程序的一部分,每个类都有一个Class对象,每编译一个类,就会产生一个Class对象(被保存在同名的class文件中).
所有的类都是对其第一次使用时动态加载到JVM中。类加载器首先检查这个类的Class对象是否已经加载,如果尚未加载,就会根据类名查找对应的.class文件将其加载。(与.java文件无关,因为运行java程序肯定是执行编译后的.class文件)
一旦某个类的Class对象在内存,就可以使用该Class对象创建该类的对象了。
————摘自java编程思想
3.我的理解是.class文件是一个类的描述的字节码,而Class对象是对应着的封装是类的信息的类型对象即Class对象,静态方法,静态成员,构造函数等都属于这个对象,当用其创建一个该类的对象后,这个对象就是jvm堆中的一个普通对象,含有成员属性和成员方法。

4.如何获取Class对象的引用
1.obj.getClass()
2.Class<OneClass> oc=OneClass.class;
3.Class<OneClass> oc=Class.forName("OneClass")

方法2与方法3
共同之处
2者都会从classpath寻找相应的类的字节码,即.class文件,并创建Class对象
不同
方法2采用延迟类初始化机制,类的静态变量和初始化块将在首次访问这个类的静态属性和方法时执行
,但是对编译器常量,即对static final XXX=XXX;指向的编译期常量不会触发初始化。方法3不会延迟初始化

5.Class.forName("com.mysql.jdbc.Driver"); //2
综上,这行代码加载了Driver类,并会执行初始化,再看Driver类的源码,
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}

发现它在初始化阶段就已经向DriverManager注册了自己,Driver中有一行注释如下
The DriverManager will try to load as many drivers as it can find and then for any given connection request, it will ask each driver in turn to try to connect to the target URL.

#2
因此
new com.mysql.jdbc.Driver()和
Class.forName("....").newInstance()都是多余的,会创建多余的Driver对象

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
手动注册同样多余,会注册两个一样的Driver(因此调用构造函数时发生了类加载,执行了静态代码块

验证
Enumeration<java.sql.Driver> e=DriverManager.getDrivers();
while(e.hasMoreElements()) {
System.out.println(e.nextElement().getClass().getName());
}

输出
com.mysql.fabric.jdbc.FabricMySQLDriver
com.mysql.jdbc.Driver
com.mysql.jdbc.Driver

浅析jdbc建立连接方式与背后的java类加载的更多相关文章

  1. Orcal的JDBC数据连接方式

    package cn.com.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...

  2. java基础-jdbc——三种方式加载驱动建立连接

    String url = "jdbc:mysql://localhost:3306/student?Unicode=true&characterEncoding=utf-8" ...

  3. JDBC建立/关闭数据库连接

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  4. Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

  5. 转:ORACLE的JDBC连接方式:OCI和THIN

    oracle的jdbc连接方式:oci和thin oci和thin是Oracle提供的两套Java访问Oracle数据库方式. thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracl ...

  6. JDBC纯驱动方式连接MySQL

    1 新建一个名为MysqlDemo的JavaProject 2 从http://dev.mysql.com/downloads/connector/j/中下载最新的驱动包. 这里有.tar.gz和.z ...

  7. Java笔记4:JDBC纯驱动方式连接Oracle

    JDBC纯驱动方式连接Oracle 1 下载Oracle提供的驱动程序包 下载地址: http://www.oracle.com/technetwork/database/enterprise-edi ...

  8. 数据库程序接口——JDBC——API解读第一篇——建立连接的核心对象

    结构图 核心对象 Driver Java通过Driver接口表示驱动,每种类型的数据库通过实现Driver接口提供自己的Driver实现类. Driver由属性,操作,事件三部分组成. 属性 公共属性 ...

  9. Android跟蓝牙耳机建立连接有两种方式

    Android 跟蓝牙耳机建立连接有两种方式. 1. Android 主动跟蓝牙耳机连BluetoothSettings 中和蓝牙耳机配对上之后, BluetoothHeadsetService 会收 ...

随机推荐

  1. clearstatcache清除文件状态缓存

    当使用下列任何函数时stat(),lstat(),file_exists(),is_writable(),is_readable(),is_executable(),is_file(),is_dir( ...

  2. 基于FPGA的RGB图像转灰度图像算法实现

    一.前言 最近学习牟新刚编著<基于FPGA的数字图像处理原理及应用>的第六章直方图操作,由于需要将捕获的图像转换为灰度图像,因此在之前代码的基础上加入了RGB图像转灰度图像的算法实现. 2 ...

  3. 文件传送协议FTP

    文件传送协议FTP 1.1.概述 文件传送协议 FTP (File Transfer Protocol) 是因特网上使用得最广泛的文件传送协议. FTP 提供交互式的访问,允许客户指明文件的类型与格式 ...

  4. 初学qt——提示窗体

    带选择的窗体 QMessageBox::StandardButton rb = QMessageBox::critical(NULL, QString::fromLocal8Bit("提示& ...

  5. AndroidStudio3.x中api、compile和implementation的区别

    首先在AndroidStudio3.x中compile已经过时 由implementation和api来代替 其次compile与api完全等同 3.x中可以完全将compile换成api mplem ...

  6. Newman+Jenkins实现接口自动化测试

    目录 一.是什么Newman 二.如何安装 三.如何使用 1.运行本地文件 2.运行在线文件 3.以node.js库运行 4.导出报告 四.命令行测试真实接口 1.导出collection文件 2.导 ...

  7. 从头认识js-js的发展历史

    JavaScript简介 JavaScript诞生于1995年,当时,它的主要目的是处理以前有服务端语言(如Perl)负责的一些输入验证操作. JavaScript简史 1995年2月当时就职于Net ...

  8. http面试问题集锦

    1.http的请求报文和响应报文? http请求报文:请求行(请求方法+url).请求头,请求体 http响应报文:状态行(http版本+状态码).响应头.响应体   2.常用的http请求类型? 请 ...

  9. 一键制作镜像并发布到k8s

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  10. 【MySQL】:事务四大特性与隔离级别

    目录 一.事务的概念 二.事务的四大特性 1.原子性 2.一致性 3.隔离性 4.持续性 三.事务语句 1.开启事务:start transaction 2.事务回滚:rollback 指定回滚点 3 ...