一個關於java資料庫驅動包的小發現

來源:互聯網
上載者:User

標籤:

之前一直都在用資料庫的驅動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 = DriverManager16                 .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資料庫驅動包的小發現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.