如何在可执行Jar中包含SQLite数据库?

发布于 2021-01-31 15:36:25

我创建了一个使用SQLite作为本地数据库的Swing应用程序。数据库文件位于项目的根目录中。

Project/DatabaseFile

该应用程序在Eclipse上运行良好,但是当我运行打包的可执行文件Jar时,出现以下错误:

No such table : table1

这意味着数据库不可访问。当我检查生成的JAR文件的内容时,数据库文件不再存在。

在代码中,我将数据库链接如下:

jdbc:sqlite:DatabaseFile

我的问题是,如何在可执行的Jar中包含SQLite数据库?

编辑

当我将数据库文件放在源文件夹中Project/src/DatabaseFile并更改了路径时jdbc:sqlite:src/DatabaseFile,它在Eclipse上可以运行,但是在以java -jar Project.jar。它说:

path to 'src/DatabaseFile': 'C:\Users\name\src' does not exist

我想我需要为数据库指定一个相对路径。

编辑

这是我连接数据库的方式:

public Connection getConnection(){      
    try{
        Class.forName("org.sqlite.JDBC").newInstance();             
        con = DriverManager.getConnection("jdbc:sqlite:src/DatabaseFile");

    } catch (Exception e) {
        Log.fatal("Méthode: getConnection() | Class  : SQLiteConnection | msg system : " + e.getMessage());
    }
    return con;
}
关注者
0
被浏览
143
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    您正在使用哪个库用于SQLite?

    我根据您指示的连接URI进行了搜索,并找到了这个。在文档中说:

    2009年5月19日:sqlite-jdbc-3.6.14.1发布。该版本支持“ jdbc:sqlite ::
    resource:”语法,以访问JAR归档文件中包含的只读DB文件或通过URL,本地文件地址等指定的外部资源(另请参见detailes

    如果那是您正在使用的驱动程序,那么我建议使用以下连接URI:

    "jdbc:sqlite::resource:DatabaseFile"
    

    关键在于,由于您的数据库位于jar文件中,因此无法使用作为文件访问它FileInputStream。相反,必须通过JVM对它的支持来访问它(即使用Class.getResource()Class.getResourceAsStream())。请注意,jar文件中包含的资源是只读的。您将无法保存对数据库的任何更改。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看