ajouter sqlite DB au fichier JAR exécutable
J'utilise JAVA (avec eclipse juno) et j'essaie de créer un fichier JAR exécutable qui inclut le fichier DB sqlite. J'ai essayé d'obtenir la connexion au DB par cette ligne:
DriverManager.getConnection("jdbc:sqlite:"+DataController.class.getResource("test.sqlite").getPath())
le DataController est une classe qui se trouve là où se trouve le sqlite.
et je garde obtiens une erreur:
java.sql.SQLException: invalid database address
est-ce que quelqu'un peut aider et donner des instructions étape par étape sur la façon d'inclure sqlite DB dans un fichier JAR exécutable?
4 réponses
apparemment sqlite-jdbc peut ouvrir des ressources sur lui-même. Par ce fil https://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk, ajouter :des ressources pour le chemin d'accès. Essayez alors la suivante:
DriverManager.getConnection("jdbc:sqlite::resource:package/test.sqlite");
remplacement du paquet par le chemin séparé ' / ' du paquet dans lequel se trouve ce fichier.
soyez conscient qu'il va copier le fichier dans un répertoire tmp.-
::resource
chemin est droit. Et ces explications vous aideront si vous utilisez ::resource
mais quand même des erreurs comme resource database.db not found: java.net.MalformedURLException: no protocol: database.db
comme verdana.
les anwsers les plus courants sont:
DriverManager.getConnection("jdbc:sqlite::resource:path/to/database.db")
cependant le path/to/database.db
doit être le chemin exact (le Chemin d'accès au Système de Fichiers Réel, mais pas dans le Jar) à votre fichier jar.
je vous recommande d'utiliser getClass().getResource()
:
DriverManager.getConnection("jdbc:sqlite::resource:" +
getClass().getResource("/path/to/db/in/the/jar/file"))
NOTE:/path/to/db/in/the/jar/file
partie doit commencer par /
Je ne suis pas sûr que cela ait changé dans les versions récentes de JDBC, mais après avoir trafiqué avec cela pendant environ une heure et avoir obtenu diverses exceptions (MalformedURLException et "base de données a été fermé"), j'ai trouvé que ce qui suit a fonctionné pour moi:
DriverManager.getConnection("jdbc:sqlite::resource:file:/path/to/database.db")
L' :fichier: partie semble manquer à partir d'autres réponses et je ne pouvais pas le faire fonctionner sans elle.
notez Aussi que l'
/path/to/database.db
est le chemin absolu à partir de la racine du .fichier jar, plutôt qu'une racine de ressource normale.
jdbc:sqlite::resource:notes_app.db
a fonctionné pour moi. Ma base de données(notes_app.db) était dans la racine du fichier jar généré.
public class Database {
public static Connection con () throws SQLException {
String url = "jdbc:sqlite::resource:notes_app.db";
return DriverManager.getConnection(url);
}
}