将sqlite DB添加到可执行的JAR文件中

时间:2013-03-03 15:07:10

标签: java eclipse jdbc

我正在使用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的分步说明吗?

4 个答案:

答案 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 ++