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

时间:2011-06-27 21:35:17

标签: java sqlite jar java-web-start

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

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

顺便使用Eclipse。

4 个答案:

答案 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