如何在jar文件中使用SQLite数据库?

我无法弄清楚如何 Java .jar文件中包含SQLite数据库以进行部署(通过Java WebStart)。

数据库不需要在运行时更新……它本质上是一个美化的配置文件。

顺便说一句,使用Eclipse。

另一个值得考虑的好选择可能是derby,javadb。 它现在与java捆绑在一起,设置速度非常快,性能也很好。

此致,Stéphane

SQLite 需要单独的文件,因为引擎确保锁定和ACID 。 即使不需要更新数据库, SQLite也只能用于直接文件访问 (或内存支持,但不能从Java或其他主机提供;-) – SQLite显示它不是纯Java解决方案,也不是设计用于不使用基本系统IO子系统的系统。

SQLite数据文件可以在开始时从JAR 提取到临时位置 (如果需要,最后放回到那里) – 但除了类似于这种方法之外,不可能。 任务本身并不复杂,但是另一件事需要完成,可能需要在某些环境中不具备的额外权限。

快乐的编码。

你考虑过HSQLDB吗? 获得HSQLDB可能比使用sqlite更好地解决这个问题。 我知道你说这是只读的,但这显然不是你配置sqlite的方式。

其他选项是存储sqlite数据库的转储

sqlite3 .dump 

在您的jar文件中,通过getResourceAsStream()从类路径启动时读取它,并在应用程序启动时创建数据库。 显然这增加了启动开销,并不理想,但可能会工作紧张。

编辑:刚刚找到代码,以编程方式实际创建数据库。 根据数据库的大小,存储SQL(必要时压缩)和启动时创建数据库可能不是那么可怕。

将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; } 

使用Add JAR / Folder下载并添加sqlite-jdbc-3.8.7.jar库…

使用清理和构建来构建项目(创建dist文件夹和副本库)

使用以下方法制作一个胖jar: http : //www.oracle.com/technetwork/articles/javase/single-jar-141905.html