码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-09-24 22:51:48      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:

之前一直都在用数据库的驱动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:此文为博主原创,未经允许不得转载。

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

标签:

原文地址:http://www.cnblogs.com/suoyi/p/4836740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!