[英]add sqlite DB to executable JAR file
我正在使用JAVA(使用eclipse juno)并尝试创建一个包含sqlite DB文件的可执行JAR文件。 我试图通过这一行获得与DB的连接:
DriverManager.getConnection("jdbc:sqlite:"+DataController.class.getResource("test.sqlite").getPath())
DataController是一个位于sqlite所在位置的类。
我一直得到一个错误:
java.sql.SQLException: invalid database address
有人可以帮助并提供有关如何在可执行JAR文件中包含sqlite DB的分步说明吗?
显然sqlite-jdbc可以自己打开资源。 根据此主题https://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk ,将:resource添加到路径中。 请尝试以下方法:
DriverManager.getConnection("jdbc:sqlite::resource:package/test.sqlite");
或取决于sqlite的版本
DriverManager.getConnection("jdbc:sqlite::resource:package/test.db");
用'/'分隔的路径替换包到此文件所在的包。
请注意,它实际上会将文件复制到tmp目录.-
::resource
方式是对的。 如果您正在使用::resource
但这些解释将有所帮助,但仍然会resource database.db not found: java.net.MalformedURLException: no protocol: database.db
错误resource database.db not found: java.net.MalformedURLException: no protocol: database.db
like verdana。
最常见的anwsers是: DriverManager.getConnection("jdbc:sqlite::resource:path/to/database.db")
但是, path/to/database.db
必须是jar文件中的确切路径( 实际文件系统中的路径,但不在Jar中 )。
我建议使用getClass().getResource()
:
DriverManager.getConnection("jdbc:sqlite::resource:" +
getClass().getResource("/path/to/db/in/the/jar/file"))
注意 : /path/to/db/in/the/jar/file
部分必须以/
开头
我不确定在最近的JDBC版本中是否已经改变了,但在使用它大约一个小时并获得各种异常(MalformedURLException和“数据库已关闭”)后,我发现以下内容对我有用:
DriverManager.getConnection("jdbc:sqlite::resource:file:/path/to/database.db")
:file:部分似乎从其他答案中丢失了,如果没有它我就无法工作。
另外,请注意
/path/to/database.db
是从.jar文件的根开始的绝对路径,而不是普通的资源根。
jdbc:sqlite::resource:notes_app.db
为我工作。 我的数据库(notes_app.db)位于生成的jar文件的根目录中。
public class Database {
public static Connection con () throws SQLException {
String url = "jdbc:sqlite::resource:notes_app.db";
return DriverManager.getConnection(url);
}
}
我的notes_app.db位于生成的jar的根目录中。 我正在使用maven和notepadd ++开发
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.