gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:01 25 4
gpt4 key购买 nike

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

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

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

当我从 Netbeans 中运行该项目时,它可以正常工作。但是当我尝试构建它并运行创建的 jar 文件时(在 dist 文件夹中)。

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

Opening connection failed: path to scr/release/db.db3:'C:\users\idxxxxx\Documents\\dist\src' does not exist

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

我的问题是:

  • 如何在我的项目中添加一个嵌入式数据库——在本例中为 sqlite——在 netbeans 中,以便它成为我项目的一部分?
  • 我应该将 db 文件放在哪里以及如何在我的项目代码中引用它?

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

谢谢

最佳答案

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

十月更新2014

org.sqlite SQLiteConfig + SQLiteDataSource

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

关于java - 将嵌入式 sqlite-db 添加到 Netbeans 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com