2013-03-03 157 views
8

我正在使用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数据库步说明,得到步骤?

+0

当给定的数据库URL无效时会发生此错误。尝试打印输出到'getConnection()'的字符串' – 2013-03-03 15:10:21

+0

我已经打印出来了,它是sqlite数据库的确切路径。 – gran33 2013-03-03 15:12:23

回答

10

显然sqlite-jdbc可以打开它自己的资源。通过此线程https://groups.google.com/forum/?fromgroups=#!topic/xerial/Oayzj5nrJGk,将:资源添加到路径。因此,尝试以下操作:

DriverManager.getConnection("jdbc:sqlite::resource:package/test.sqlite"); 

更换包装用“/”分隔路径包这个文件是在

知道它会在文件实际上复制到TMP directory.-

+0

我读过使用jdbc:sqlite :: resource:db是只读的。 – Paolo 2014-08-24 21:37:51

+0

如果你的数据库(就像我的)只是在你的项目的* resources *目录下,那么下面的连接字符串就足够了:'jdbc:sqlite :: resource:test.sqlite'或'jdbc:sqlite :: resource:test .db'取决于你的SQLite版本。我花了太多时间试图弄清楚这一点。除了URI之外的'resource'就是让它工作的原因,因为没有它,驱动程序会假定你的数据库和连接到它的文件位于同一个目录中。 – 2015-09-06 20:48:02

+0

我跟着这个,并得到一个异常java.sql.SQLException:资源quanlythuchi3.sqlite未找到:java.net.MalformedURLException:没有协议:MyDB.sqlite – Andiana 2015-10-12 01:08:05

0

::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部分必须以/

0

我不知道,如果这在最近JDBC版本已经改变,但摆弄后它约一个小时,并获得各种例外(MalformedURLException和“数据库已关闭”),我发现以下工作对我来说:

DriverManager.getConnection("jdbc:sqlite::resource:file:/path/to/database.db") 

:file:部分似乎从其他答案中缺少,我不能没有它的工作。

而且,请注意,

/path/to/database.db 

是从.jar文件的根开始,而不是一个正常的资源根的绝对路径。