一个关于java数据库驱动包的小发现

之前一直都在用数据库的驱动jar包,却没有仔细看过。只知道Class.forName();去装载驱动类。

今天无意间想到Class.forName();不就是装载类嘛,难道引用的jar包里的类不会在虚拟机启动的时候被直接装载嘛?

然后写了点代码做了测试:

 1 package com.mariadb.test;
 2
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 //import org.mariadb.jdbc.Driver;
 9
10 public class Test {
11     public static void main(String[] args) throws ClassNotFoundException,
12             SQLException {
13 //        Class.forName("org.mariadb.jdbc.Driver");   //在新版的驱动包里有个文件取代了这句话的作用
14
15         Connection conn = DriverManager
16                 .getConnection("jdbc:mariadb://localhost:3306/test?user=root&password=bdqn");
17
18         Statement statement = conn.createStatement();
19
20         ResultSet rs = statement.executeQuery("SELECT * FROM `tb1`");
21
22         while (rs.next()) {
23             System.out.println(rs.getInt(1) + "\t" + rs.getString(2));
24         }
25     }
26 }

然后测试结果是即使不使用Class.forName();程序依旧可以正常读取数据库的数据,所以暂时认为jar包里的类会被装载。

但是又觉得不太对,如果我一个项目引用了非常多的jar包岂不是启动非常慢嘛。

然后去问问问别人,都说是jar包里的类只有在被用到的时候才加载。

但是有又如何解释驱动jar包里的Driver类中的静态代码块被执行的问题呢。

终于查到有关于驱动jar包这种现象的解释。

所以如果使用JDBC 4.0以上的版本,上图类似的文件存在, Class.forName();这一步可以省略。该文件的内容为本jar包中的驱动类的全名。

ps:此文为博主原创,未经允许不得转载。

时间: 2024-12-25 07:09:33

一个关于java数据库驱动包的小发现的相关文章

为什么在加载数据库驱动包的时候有用的是Class.forName( ),却没有调用newInstance( )?

在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法. 通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类. 通常编码过程中,在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作.因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象. 有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调

pom.xml中添加oracle数据库驱动包报错: Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0

pom.xml 加载jar包时报错:Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0. 由于oracle的ojdbc收费,所以在maven项目导入时没有ojdbc14-10.2.0.4.0.jar包. 解决方法: 配置本地库.下载jar包,把jar包放在仓库对应的文件夹ojdbc14\10.2.0.4.0\里,安装到本地仓库(需要事先配过maven的环境变量),在命令行工具中写如下命令,注意本地仓库位置一定要写对: mvn install:in

JAVA数据库编程(JDBC技术)-入门笔记

本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学习一下.我现在很迫不及待用JAVA想来实现以下对数据库的增删改查.想实现就来看Java是怎么操作数据库的,回想下.Net里你可能会配置web.Config,或者你去写一些DBhelper类然后调用里面的自己定义的一些增删改查的方法,更或者你去配一些数据控件等等往往发现操作基本都是一体化的简单.现在面

JDBC加载数据库驱动的方式

JDBC作为数据库访问的规范接口,其中只是定义一些接口.具体的实现是由各个数据库厂商来完成. 一.重要的接口: 1.public interface Driver 每个驱动程序类必须实现的接口.Java SQL 框架允许多个数据库驱动程序.每个驱动程序都应该提供一个实现 Driver 接口的类.DriverManager 会试着加载尽可能多的它可以找到的驱动程序,然后,对于任何给定连接请求,它会让每个驱动程序依次试着连接到目标 URL.强烈建议每个 Driver 类应该是小型的并且是单独的,这样

Java常用jar包用途

Java常用jar包用途: USAGE INDEX JAR NAME USAGE 1 ASM asm-2.2.3.jar ASM字节码库 2 ASM asm-commons-2.2.3.jar ASM字节码库 3 ASM asm-util-2.2.3.jar Java字节码操纵和分析框架 4 COMMONS commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. 5 COMMONS commons-beanuti

Java常见Jar包的用途

jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.jar JAF框架的jar包 annotations-a

Java数据库的存取技术

IT技术日新月异,新技术的出现令人目不暇接,似乎每一天都在产生着新名词.不过归根结底IT所要实现的价值不外乎数据收集,然后再以客户希望的形式展示给客户而已.因此数据存取技术也就成了一个永恒的话题.而在Java这个开放的世界里,数据库存取技术是五花八门,种类繁多.我们也来侃侃Java世界里主流的数据库存取技术. 首先列出英雄榜 1.    JDBC直接访问数据库 2.    EJB  entity bean. 3.    JDO技术. 4.    第三方O/R工具,如目前大红大紫的Hibernat

Class.forName()数据库驱动

在学习jdbc中,用到Class.forName(驱动);,当时学习的时候知道Class.forName就是加载一个类到虚拟机,在加载一个类的时候,这个类的信息会被放到一个方法区,一个CLass 在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类.在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作

java访问access数据库驱动加载不正确

前几天新装了系统,做了一个从access数据库中查询内容的程序,运行的时候总是提示数据库的驱动加载不正确,网上百度的结果都是说电脑没有配置odbc数据源,或者是Driver后面空格的问题,可是我检查了之后,这些都没有错: 后来发现是新导入的java工程,程序默认了eclipse的jre system library,我就把这个默认的修改成我电脑配置的jdk后,再次运行,程序就正常了