[英]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。
基本上,它使JVM注冊您的代碼正在使用java.sql.*
庫的哪個實現。 這樣,您可以依靠標准接口,而無需經歷要求實現級詳細信息的障礙。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.