3

次の質問があり、しばらくの間忙しくしています。
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-file を output-dir のルートに追加すると (jar 自体ではなく)、アプリケーションは部分的に動作しますが、一部の db-data がアプリケーションで欠落しています (空のコンボボックス)。
そのため、問題もあるようです。

私の質問は:

  • 埋め込みデータベース (この場合は sqlite) を netbeans にプロジェクトに追加して、プロジェクトの一部にする方法を教えてください。
  • db ファイルをどこに配置すればよいですか? また、プロジェクト コード内から参照するにはどうすればよいですか?

エンドユーザーが受け取るファイル内の db ファイルをエンドユーザーに見せたくありません
そのため、可能であれば、db-file を .jar の一部にしたいと考えています。

TNX

4

1 に答える 1

2

SQLiteには、データベースを更新しなくても、個別のファイルが必要です。

Needはロックを保証し、データベースのACIDプロパティを保証します。

.jar内からのSQLite

  • 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年10月8日:sqlite-jdbc-3.8.6.jarsqlite3.8.6に更新

于 2013-03-19T19:07:32.057 に答える