L'éditeur php Yuzai a rencontré un problème lors de l'utilisation de JDBC et SQLite. Peu importe ses efforts, il n'a pas pu trouver de pilote approprié. JDBC est une interface standard permettant à Java de se connecter à la base de données, tandis que SQLite est un moteur de base de données relationnelle intégré léger. Cependant, bien que JDBC fournisse des pilotes pour diverses bases de données, il n'existe aucun pilote spécifiquement conçu pour SQLite. Cela a rendu l'éditeur confus et incapable de se connecter et de faire fonctionner la base de données SQLite normalement. Dans le prochain article, nous explorerons les moyens de résoudre ce problème.
À des fins d'apprentissage, j'essaie de créer un programme Java simple et de me connecter à la base de données SQLite. Mais malgré tous mes efforts, je n’ai pas réussi. Je reçois toujours des chauffeurs no 适用于 jdbc:sqlite:database.db
. Mais cela devrait être si simple. J'ai essayé de nombreux pilotes du référentiel maven.
J'ai lu et compris la théorie : l'API jdbc gère la communication avec le gestionnaire jdbc, tandis que le pilote jdbc gère la communication avec la base de données. J'ai également appris que lorsque j'exécute le fichier de classe compilé, je dois ajouter le chemin de classe au fichier .jar contenant le pilote de base de données. Par exemple, comme expliqué ici.
Certains tutoriels prétendent devoir utiliser class.forname()
pour enregistrer le pilote, mais la documentation Oracle dit :
applications no longer need to explicitly load jdbc drivers using class.forname()]
De plus, le tutoriel SQLite que j'ai suivi n'a jamais enregistré le pilote avant d'exécuter l'drivermanager.getconnection(url);
exemple sqlitetutorial.net
Dans mon répertoire e:project
J'ai ces fichiers :
database.java database.class database.db sqlite-jdbc-3.44.1.0.jar
Lorsque j'exécute le fichier de classe compilé, j'utilise java -cp ".;sqlite-jdbc-3.44.1.0.jar" database
Voici mon 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
Si je peux obtenir de l'aide pour me faire avancer, je serais très reconnaissant.
Je suppose que cela a quelque chose à voir avec le fait de ne pas pouvoir trouver le fichier .jar, mais j'ai tout essayé : mettre une copie du fichier .jar n'importe où dans un répertoire différent, le renommer pour le rendre plus simple, et quand ajout Ajouter plusieurs chemins de classe de répertoire, etc. Je ne sais pas ce qui pourrait manquer.
De plus, lorsque j'essaie de faire la même chose dans vscode, en ajoutant le fichier .jar sous "Bibliothèques référencées", cela ne fonctionne toujours pas.
Le problème est que le pilote sqlite jdbc est également requis slf4j-api-1.7.36.jar
, consultez son dépôt github pour plus de détails :
En d'autres termes, vous devez également mettre slf4j-api-1.7.36.jar
dans ce répertoire et utiliser :
java -cp ".;sqlite-jdbc-3.44.1.0.jar;slf4j-api-1.7.36.jar" database
Sur ma machine, cela ferait fonctionner :
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.
Si vous avez 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
Ainsi, même si le chargement explicite du pilote n'est plus nécessaire, il peut fournir des informations de dépannage supplémentaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!