将嵌入式sqlite-db添加到Netbeans项目中

时间:2013-03-19 14:25:17

标签: java sqlite netbeans

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

我通过以下方式从代码中引用db:

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

当我从Netbeans中运行项目时,它没有任何问题。但是当我尝试构建它并运行创建的jar文件时(在dist文件夹中)。

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

  

打开连接失败:路径到   SCR /释放/ db.db3: 'C:\用户\ idxxxxx \文件\\ DIST \ src' 中   不存在

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

我的问题是:

  • 如何在这种情况下添加嵌入式db-sqlite - 在netbeans中添加到我的项目中,这样它将成为我项目的一部分?
  • 我应该在哪里放置db-file以及如何从我的项目代码中引用它?

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

TNX

1 个答案:

答案 0 :(得分:2)

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中。

数据库文件将被解压缩到临时文件夹System.getProperty(“java.io.tmpdir”)

e.g。

 [...]
 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: "...");
 }

更新oct。 2014

org.sqlite SQLiteConfig + SQLiteDataSource

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