php-Editor Yuzai ist bei der Verwendung von JDBC und SQLite auf ein Problem gestoßen, egal wie sehr er sich bemüht hat, er konnte keinen geeigneten Treiber finden. JDBC ist eine Standardschnittstelle für Java zur Verbindung mit Datenbanken, während SQLite eine leichtgewichtige eingebettete relationale Datenbank-Engine ist. Obwohl JDBC Treiber für verschiedene Datenbanken bereitstellt, gibt es keinen speziell für SQLite entwickelten Treiber. Dies führte dazu, dass der Editor verwirrt war und nicht in der Lage war, eine Verbindung zur SQLite-Datenbank herzustellen und diese normal zu betreiben. Im nächsten Artikel werden wir Möglichkeiten zur Lösung dieses Problems untersuchen.
Zu Lernzwecken versuche ich, ein einfaches Java-Programm zu erstellen und eine Verbindung zur SQLite-Datenbank herzustellen. Aber so sehr ich es auch versuchte, es gelang mir nicht. Ich bekomme immer no 适用于 jdbc:sqlite:database.db
Fahrer. Aber es sollte so einfach sein. Ich habe viele Treiber aus dem Maven-Repository ausprobiert.
Ich habe die Theorie gelesen und verstanden: Die JDBC-API übernimmt die Kommunikation mit dem JDBC-Manager, während der JDBC-Treiber die Kommunikation mit der Datenbank übernimmt. Ich habe auch gelernt, dass ich beim Ausführen der kompilierten Klassendatei den Klassenpfad zur .jar-Datei hinzufügen muss, die den Datenbanktreiber enthält. Zum Beispiel wie hier erklärt.
Einige Tutorials behaupten, dass class.forname()
zum Registrieren des Treibers verwendet werden muss, aber in der Oracle-Dokumentation heißt es:
applications no longer need to explicitly load jdbc drivers using class.forname()]
Außerdem hat das SQLite-Tutorial, dem ich gefolgt bin, den Treiber nie registriert, bevor ich das drivermanager.getconnection(url);
Beispiel sqlitetutorial.net
In meinem Verzeichnis e:project
habe ich diese Dateien:
database.java database.class database.db sqlite-jdbc-3.44.1.0.jar
Wenn ich die kompilierte Klassendatei ausführe, verwende ich java -cp ".;sqlite-jdbc-3.44.1.0.jar" database
Das ist mein Code:
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
Wenn ich Hilfe bekomme, die mich voranbringt, wäre ich sehr dankbar.
Ich schätze, es hat etwas damit zu tun, dass ich die .jar-Datei nicht finden konnte, aber ich habe alles Mögliche versucht: eine Kopie der .jar-Datei irgendwo in einem anderen Verzeichnis ablegen, sie umbenennen, um es einfacher zu machen, und wann Hinzufügen Mehrere Verzeichnisklassenpfade hinzufügen usw. Ich weiß nicht, was fehlen könnte.
Auch wenn ich versuche, dasselbe in vscode zu tun, indem ich die .jar-Datei unter „Referenzierte Bibliotheken“ hinzufüge, funktioniert es immer noch nicht.
Das Problem besteht darin, dass auch der SQLite-JDBC-Treiber erforderlich ist slf4j-api-1.7.36.jar
, Einzelheiten finden Sie im github-Repository:
Mit anderen Worten, Sie müssen auch slf4j-api-1.7.36.jar
in dieses Verzeichnis einfügen und Folgendes verwenden:
java -cp ".;sqlite-jdbc-3.44.1.0.jar;slf4j-api-1.7.36.jar" database
Auf meiner Maschine würde es funktionieren:
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.
Wenn Sie class.forname("org.sqlite.jdbc")
明确添加到您的应用程序中,您将能够诊断此问题,因为如果没有 slf4-api-1.7.36.jar
则会导致中(我将 class.forname
添加到 main
haben):
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
Obwohl das explizite Laden des Treibers nicht mehr erforderlich ist, kann er zusätzliche Informationen zur Fehlerbehebung liefern.
Das obige ist der detaillierte Inhalt vonJDBC und SQLite – Ich kann nicht den richtigen Treiber finden, egal was ich versuche. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!