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中文網其他相關文章!