簡體   English   中英

Java JAR(庫)用法

[英]Java JAR (library) usage

我曾經在Eclipse中使用過GSON庫,這非常容易。 剛剛將其添加為外部庫,並且在源文件中,我已經將其導入,並且能夠像Java中的任何其他類一樣使用它。 例:

Gson gson = new Gson(); //and just use it

最近,我不得不使用SQLIte數據庫文件,因此我已經下載了JDBC驅動程序庫並將其添加到我的Eclipse項目中。 但是我注意到使用它有一種奇怪的語法(至少對我而言)。 我已經導入了java.sql.*但是為了能夠使用其類,我必須執行以下操作:

 Class.forName("org.sqlite.JDBC");

我知道該命令的返回值是Class對象(在運行時),但是從語法上可以看出,它從未使用過。

請解釋發生了什么,以及為什么我不能不先調用Class.forName就使用SQL包類。

它動態加載一個類。 Class.forname方法有什么作用? 是一篇很好的文章,它還解釋了為什么數據庫驅動程序需要它:

讓我們看看為什么需要Class.forName()將驅動程序加載到內存中。 所有JDBC驅動程序都有一個靜態塊,該塊向DriverManager進行自身注冊,而DriverManager僅具有靜態的初始化程序。

MySQL JDBC驅動程序具有一個靜態初始化程序,如下所示:

static {
    try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException("Can't register driver!");
    }
}

JVM執行靜態塊,並且驅動程序向DriverManager注冊自身。

您需要數據庫連接才能操作數據庫。 為了創建與數據庫的連接,DriverManager類必須知道要使用哪個數據庫驅動程序。 它通過遍歷已向其注冊的驅動程序的數組(內部為Vector)並在數組中的每個驅動程序上調用acceptsURL(url)方法,從而有效地要求驅動程序告訴它是否可以處理JDBC,來實現此目的。 URL。

源代碼-'Class.forName(“ org.sqlite.JDBC”);'是什么? 做?

基本上,它使JVM注冊您的代碼正在使用java.sql.*庫的哪個實現。 這樣,您可以依靠標准接口,而無需經歷要求實現級詳細信息的障礙。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM