首頁  >  文章  >  JDBC 和 SQLite - 無論我如何嘗試都找不到合適的驅動程式

JDBC 和 SQLite - 無論我如何嘗試都找不到合適的驅動程式

王林
王林轉載
2024-02-09 10:57:18567瀏覽

php小編魚仔在使用JDBC和SQLite時遇到了​​一個問題,無論如何嘗試都找不到合適的驅動程式。 JDBC是Java連接資料庫的一種標準接口,而SQLite則是一種輕量級的嵌入式關係型資料庫引擎。然而,儘管JDBC提供了各種資料庫的驅動程序,卻沒有專門為SQLite設計的驅動程式。這讓小編陷入了困惑,無法正常連線並操作SQLite資料庫。在接下來的文章中,我們將一起探討解決這個問題的方法。

問題內容

出於學習目的,我嘗試製作一個簡單的 java 程式並連接到 sqlite 資料庫。但無論我怎麼努力,我都無法成功。我總是得到 no 適用於 jdbc:sqlite:database.db 的驅動程式。但它應該如此簡單。我已經嘗試過 maven 存儲庫中的許多驅動程式。

我已經閱讀並了解這個理論:jdbc api 處理與 jdbc 管理器的通信,而 jdbc 驅動程式處理與資料庫的通信。我還了解到,當我運行編譯的類文件時,必須向包含資料庫驅動程式的 .jar 檔案添加類路徑。例如,如此處所解釋的。

一些教程聲稱需要使用 class.forname() 註冊驅動程序,但 oracle 文件說:

applications no longer need to explicitly load jdbc drivers using class.forname()]

此外,我遵循的 sqlite 教程在運行 drivermanager.getconnection(url); 範例 sqlitetutorial.net 之前從未註冊驅動程式

在我的目錄 e:\project 中我有這些檔案:

database.java
database.class
database.db
sqlite-jdbc-3.44.1.0.jar

當我執行編譯的類別檔案時,我在終端視窗(powershell)中使用 java -cp ".;sqlite-jdbc-3.44.1.0.jar" database

#這是我的程式碼:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DataBase {
    public static void connect() {
        Connection conn = null;
        try {
            String url = "jdbc:sqlite:database.db";
            conn = DriverManager.getConnection(url);
            
            System.out.println("Connection is established");
            
            conn.close();
            System.out.println("Connection closed.");

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    } // End method connect

    public static void main(String[] args) {
         connect();

    } // End of main method
} // End of class

如果我能得到任何幫助來推動我前進,我將不勝感激。

我想這與找不到.jar 檔案有關,但我已經嘗試了一切可能的方法:將.jar 檔案的副本放在不同目錄中的任何位置,並重命名它以使其更簡單,在新增時新增多個目錄類路徑等。我不知道可能缺少什麼。

此外,當我嘗試在 vscode 中執行相同操作時,透過在「引用庫」下新增 .jar 文件,它仍然不起作用。

解決方法

問題是sqlite jdbc 驅動程式也需要slf4j-api-1.7.36.jar,詳細資訊請參考其github 儲存庫

換句話說,您還需要將 slf4j-api-1.7.36.jar 放入該目錄中並使用:

java -cp ".;sqlite-jdbc-3.44.1.0.jar;slf4j-api-1.7.36.jar" database

在我的機器上這將使它工作:

d:\temp> java -cp ".;sqlite-jdbc-3.44.1.0.jar;slf4j-api-1.7.36.jar" database
slf4j: failed to load class "org.slf4j.impl.staticloggerbinder".
slf4j: defaulting to no-operation (nop) logger implementation
slf4j: see http://www.slf4j.org/codes.html#staticloggerbinder for further details.
connection is established
connection closed.

如果您已將class.forname("org.sqlite.jdbc") 明確添加到您的應用程式中,您將能夠診斷此問題,因為如果沒有slf4-api -1.7.36.jar 則會導致中(我將class.forname 加入到main):

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at org.sqlite.JDBC.<clinit>(JDBC.java:26)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:375)
        at DataBase.main(DataBase.java:23)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
        ... 4 more

因此,雖然不再需要明確載入驅動程序,但它可以提供額外的故障排除資訊。

以上是JDBC 和 SQLite - 無論我如何嘗試都找不到合適的驅動程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除