将嵌入式sqlitedb添加到Netbeans项目中



我有以下问题,这让我忙了一段时间
我正在Netbeans中构建一个Java项目,我在这个项目中使用了一个嵌入式sqlite DB
当前DB位于包src/release/中。

我通过以下方式引用代码中的数据库:

c = DriverManager.getConnection("jdbc:sqlite:src/release/db.db3");

当我在Netbeans中运行该项目时,它可以毫无问题地运行。但是当我尝试构建它并运行创建的jar文件(在dist文件夹中(时。

我收到以下错误消息(翻译自荷兰语描述(:

打开连接失败:到的路径scr/release/db.db3:'C:\users\idxxxxx\Documents\\dist\src'不存在

在代码中引用DB时,如下所示:
c = driverManager.getConnection("jdbc:sqlite:db.db3");
将db文件添加到输出目录的根目录中(因此不在jar本身中(,应用程序可以部分工作,但我的应用程序中缺少一些db数据(空的组合框(
因此,似乎也存在一个问题。

我的问题是:

  • 如何在netbeans中添加一个嵌入的db-sqlite,使其成为我的项目的一部分
  • 我应该把数据库文件放在哪里?如何在项目代码中引用它

我不希望最终用户在他将收到的文件中看到任何数据库文件
因此,如果可能的话,我希望数据库文件成为.jar的一部分。

Tnx

SQLite需要单独的文件,即使不需要更新数据库。

Need确保锁定并确保数据库ACID属性。

来自内部的SQLite.jar

  • SQLite设计用于直接访问文件
  • SQLite可能需要在某些环境中不可用的额外权限

SQLite数据文件可以在启动时从JAR中提取到一个临时位置。

将数据库url直接写入程序不是一个好的选择。

getConnection("jdbc:sqlite:src/release/db.db3");

让您的应用程序查找该文件。如果未找到:error: File db.db3 not found消息。然后了解用户,不是程序出错,而是缺少数据库文件。

由于您使用的是java,因此创建动态url很容易
例如CCD_ 6
然后应用程序知道将提取的文件(来自jar的db.db3(复制到哪里。

从.jar中提取SQlite

  • 你可以让java为你做这件事
  • 使用jdbc:sqlite::resource:
  • 您需要sqlitejdbcJAR,因此提取JAR文件并添加到应用程序JAR中

DB文件将被提取到临时文件夹System.getProperty(“java.io.tmpdir”)中。

例如

 [...]
 import org.sql.*;
 import org.sqlite.*; 
 [...]
 try {
    Class.forName("org.sqlite.JDBC");
    SQLiteConfig config = new SQLiteConfig();
    config.enableFullSync(true);
    config.setReadOnly(false);
    SQLiteDataSource ds = new SQLiteDataSource(config);
    ds.setUrl("jdbc:sqlite::resource:"+
              getClass().getResource("db.db3").toString());
    conn = ds.getConnection();
 }catch(SQLException se)
 {
  System.out.println("SQLError: "...");
 }

更新2014年10月

org.sqlite SQLiteConfig+SQLiteDataSource

2014年10月8日:sqlite-jdbc-3.8.6.jar更新为sqlite3.8.6

相关内容

  • 没有找到相关文章

最新更新