您的位置:首页 > 编程语言 > Java开发

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

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

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

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

package com.mariadb.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//import org.mariadb.jdbc.Driver;

public class Test {
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
//        Class.forName("org.mariadb.jdbc.Driver");   //在新版的驱动包里有个文件取代了这句话的作用

Connection conn = DriverManager
.getConnection("jdbc:mariadb://localhost:3306/test?user=root&password=bdqn");

Statement statement = conn.createStatement();

ResultSet rs = statement.executeQuery("SELECT * FROM `tb1`");

while (rs.next()) {
System.out.println(rs.getInt(1) + "\t" + rs.getString(2));
}
}
}


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

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

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

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

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




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

ps:此文为博主原创,未经允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: