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

标签 java swing sqlite executable-jar

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

Project/DatabaseFile

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

No such table : table1

这意味着无法访问数据库。当我检查生成的 JAR 文件的内容时,数据库文件已经不存在了。

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

jdbc:sqlite:DatabaseFile

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

编辑

当我将数据库文件放在源文件夹 Project/src/DatabaseFile 并将路径更改为 jdbc:sqlite:src/DatabaseFile 时,它在 Eclipse 上工作,但是再次将 Jar 文件作为 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;
}

最佳答案

你使用什么库来支持 SQLite?

我根据您指定的连接 URI 进行了搜索,发现 this one .在 documentation它说:

2009 May 19th: sqlite-jdbc-3.6.14.1 released. This version supports "jdbc:sqlite::resource:" syntax to access read-only DB files contained in JAR archives, or external resources specified via URL, local files address etc. (see also the detailes)

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

"jdbc:sqlite::resource:DatabaseFile"

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

关于java - 如何在可执行 Jar 中包含 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019974/

相关文章:

java - 模型之间的交互 ​​MVC Java

android - 使用 Phonegap 从 SQLite 数据库为 Android 填充数据

java - 为什么我的 JavaFX 应用程序中有多余的空间?

java - 如何按属性对自定义对象的 vector (即其他自定义对象的映射)进行排序?

java - 在控制台输出调试信息

ios - SQLite 查询 WHERE 和 NSNumber 在处理参数时给出 BAD ACCESS 错误

c - mac os 上的 sqlite c 库?

java - java中的奇怪声明

java - JNI4Net C# 到 Java

java - groovy.lang.MissingPropertyException:无法为类型org.gradle.api.Project的项目 'versionKey'设置未知属性 ':flamingo'