我创建了一个使用 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/