【问题标题】:Adding embedded sqlite-db to Netbeans project将嵌入式 sqlite-db 添加到 Netbeans 项目
【发布时间】:2014-10-24 01:28:54
【问题描述】:

我有以下问题让我忙了一段时间。
我正在 Netbeans 中构建一个 Java 项目,并且我有一个嵌入式 sqlite 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' 不存在

在这样的代码中引用数据库时:
c = driverManager.getConnection("jdbc:sqlite:db.db3");
并将 db 文件添加到 output-dir 的根目录(所以不在 jar 本身中),应用程序部分工作,但我的应用程序中缺少一些 db 数据(空组合框)。
所以似乎也有问题。

我的问题是:

  • 如何在 netbeans 中将嵌入式数据库(在这种情况下为 sqlite)添加到我的项目中,使其成为我项目的一部分?
  • 我应该将 db 文件放在哪里以及如何从我的项目代码中引用它?

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

Tnx

【问题讨论】:

  • 我认为您可能在某些地方弄乱了 src/scr。看看这样的错误 - src/release/db.db3 and failed: path to scr/release/db.db3;

标签: java sqlite netbeans


【解决方案1】:

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

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

SQLite from inside .jar

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

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

把数据库url直接写到程序里不是一个好选择。

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

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

由于您使用的是 java,因此创建动态 url 很容易。
例如"jdbc:sqlite:"+PathToApp +"/data/db.db3".
然后应用程序知道将提取的文件(jar 中的 db.db3)复制到哪里。

从 .jar 中提取 SQlite

  • 你可以让 java 帮你做。
  • 使用jdbc:sqlite::resource:
  • 您需要 sqlite-jdbc JAR,因此提取 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: "...");
 }

10 月更新。 2014

org.sqlite SQLiteConfig + SQLiteDataSource

2014 October 8th: sqlite-jdbc-3.8.6.jar Updated to sqlite 3.8.6

【讨论】:

  • SQLiteConfig 和 SQLiteDataSource 是内置在类或用户定义的类中..?请建议..
  • 好的.. 如何将这些文件包含到我的项目中。或者这些文件需要导入任何库。请帮助我。
猜你喜欢
  • 2016-12-28
  • 1970-01-01
  • 2011-02-07
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2010-09-22
  • 1970-01-01
相关资源
最近更新 更多