将sqlite数据库添加到可执行的JAR文件
我正在使用JAVA(带有eclipse juno)并尝试创建一个包含sqlite数据库文件的可执行JAR文件。 我试图让该线连接到DB:将sqlite数据库添加到可执行的JAR文件
DriverManager.getConnection("jdbc:sqlite:"+DataController.class.getResource("test.sqlite").getPath())
的DataController类是位于源码所在的位置的一类。
,我不断得到一个错误:
java.sql.SQLException: invalid database address
是否有人可以帮助和如何包括一个可执行的JAR文件中的SQLite数据库步说明,得到步骤?
显然sqlite-jdbc可以打开它自己的资源。通过此线程https://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk,将:资源添加到路径。因此,尝试以下操作:
DriverManager.getConnection("jdbc:sqlite::resource:package/test.sqlite");
更换包装用“/”分隔路径包这个文件是在
知道它会在文件实际上复制到TMP directory.-
。我读过使用jdbc:sqlite :: resource:db是只读的。 – Paolo 2014-08-24 21:37:51
如果你的数据库(就像我的)只是在你的项目的* resources *目录下,那么下面的连接字符串就足够了:'jdbc:sqlite :: resource:test.sqlite'或'jdbc:sqlite :: resource:test .db'取决于你的SQLite版本。我花了太多时间试图弄清楚这一点。除了URI之外的'resource'就是让它工作的原因,因为没有它,驱动程序会假定你的数据库和连接到它的文件位于同一个目录中。 – 2015-09-06 20:48:02
我跟着这个,并得到一个异常java.sql.SQLException:资源quanlythuchi3.sqlite未找到:java.net.MalformedURLException:没有协议:MyDB.sqlite – Andiana 2015-10-12 01:08:05
::resource
方式是对的。如果您使用的是::resource
,但这些解释仍将有所帮助,但仍会收到类似verdana的错误resource database.db not found: java.net.MalformedURLException: no protocol: database.db
。
最常见的anwsers是: DriverManager.getConnection("jdbc:sqlite::resource:path/to/database.db")
然而path/to/database.db
必须是准确的路径(路径在实际文件系统而不是在罐)到您的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文件的根开始,而不是一个正常的资源根的绝对路径。
当给定的数据库URL无效时会发生此错误。尝试打印输出到'getConnection()'的字符串' – 2013-03-03 15:10:21
我已经打印出来了,它是sqlite数据库的确切路径。 – gran33 2013-03-03 15:12:23