我无法弄清楚如何在<。em> Java .jar文件中包含SQLite数据库以进行部署(通过Java WebStart)。
数据库不需要在运行时更新...它本质上是一个美化的配置文件。
顺便使用Eclipse。
答案 0 :(得分:11)
由于how the engine ensures locking and ACID,SQLite 需要单独的文件。即使不需要更新数据库, SQLite仅设计用于直接文件访问 (或内存支持,但不是Java或其他主机提供的;-) - SQLite在这里展示的不是纯Java解决方案,也不是为没有使用基本系统IO子系统的系统而设计的。
SQLite数据文件可以从JAR 提取到开始时的临时位置(如果需要,最后放回到那里) - 但除此之外类似于这种方法的东西,不可能。任务本身并不复杂,但是需要做的另一件事情可能需要在某些环境中不具备的额外权限。
快乐的编码。
答案 1 :(得分:5)
您考虑过HSQLDB了吗?获得HSQLDB可能比使用sqlite更好地解决这个问题。我知道你说这是只读的,但这显然不是你配置sqlite的方式。
其他选项是存储sqlite数据库的转储
sqlite3 .dump
在您的jar文件中,在启动时从类路径通过getResourceAsStream()读取它,并在应用程序启动时创建数据库。显然,这会增加启动开销并且不理想,但可能会有所帮助。
编辑:只是找到了以编程方式here实际创建数据库的代码。根据数据库的大小,存储SQL(必要时压缩)并在启动时创建数据库可能不是那么可怕。
答案 2 :(得分:2)
考虑的另一个好选择可能是德比,javadb。它现在与java捆绑在一起,设置速度非常快,性能也很好。
此致 斯特凡
答案 3 :(得分:2)
将SQLite数据库放入项目中的资源文件夹(包)中。
像这样连接:
public class SQLiteProject extends javax.swing.JFrame {
:
private void formWindowOpened(java.awt.event.WindowEvent evt) {
CModel.connectDB(getClass().getResource("/resources/database.sqlite").toString());
}
public class CModel {
:
public static Connection connectDB(String cstr) {
try {
Class.forName("org.sqlite.JDBC");
Conn = DriverManager.getConnection("jdbc:sqlite::resource:" + cstr);
JOptionPane.showMessageDialog(null, "Connect!");
return Conn;
} catch (ClassNotFoundException | SQLException | HeadlessException e) {
JOptionPane.showMessageDialog(null, e);
}
return null;
}
使用添加JAR /文件夹下载并添加sqlite-jdbc-3.8.7.jar库...
使用清理和构建来构建项目(创建dist文件夹和副本库)
使用以下方法制作一个胖罐: http://www.oracle.com/technetwork/articles/javase/single-jar-141905.html