我正在使用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的分步说明吗?
答案 0 :(得分:12)
显然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目录.-
答案 1 :(得分:1)
::resource
方式是正确的。如果您使用的是::resource
,但这些解释会有所帮助,但仍会出现像resource database.db not found: java.net.MalformedURLException: no protocol: database.db
这样的错误,如verdana。
最常见的产品是:
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
部分必须以/
答案 2 :(得分:0)
我不确定在最近的JDBC版本中是否已经改变了,但是在使用它大约一个小时并获得各种异常(MalformedURLException和“数据库已经关闭”)后,我发现以下内容对我有用:
DriverManager.getConnection("jdbc:sqlite::resource:file:/path/to/database.db")
:文件:部分似乎在其他答案中缺失,如果没有它,我无法让它工作。
另外,请注意
/path/to/database.db
是从.jar文件的根开始的绝对路径,而不是普通的资源根。
答案 3 :(得分:0)
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 ++