実行可能なJARにSQLiteデータベースを含めるにはどうすればいいですか? 質問する

実行可能なJARにSQLiteデータベースを含めるにはどうすればいいですか? 質問する

ローカル データベースとして SQLite を使用する Swing アプリケーションを作成しました。データベース ファイルはプロジェクトのルート ディレクトリにあります。

Project/DatabaseFile

アプリケーションは Eclipse 上で正常に実行されますが、パッケージ化された実行可能 Jar を実行すると、次のエラーが発生します。

No such table : table1

これは、データベースにアクセスできないことを意味します。生成された JAR ファイルの内容を調べたところ、データベース ファイルはそこにありませんでした。

コードでは、次のようにデータベースをリンクしました。

jdbc:sqlite:DatabaseFile

私の質問は、実行可能 Jar に SQLite データベースを含めるにはどうすればよいかということです。

編集

DB ファイルをソース フォルダに配置しProject/src/DatabaseFile、パスを に変更するとjdbc:sqlite:src/DatabaseFile、Eclipse では動作しましたが、Jar ファイルを として実行すると再び動作しませんでしたjava -jar Project.jar。次のように表示されました。

path to 'src/DatabaseFile': 'C:\Users\name\src' does not exist

データベースの相対パスを指定する必要があると思います。

編集

データベースに接続する方法は次のとおりです。

public Connection getConnection(){      
    try{
        Class.forName("org.sqlite.JDBC").newInstance();             
        con = DriverManager.getConnection("jdbc:sqlite:src/DatabaseFile");              

    } catch (Exception e) {
        Log.fatal("Méthode: getConnection() | Class  : SQLiteConnection | msg system : " + e.getMessage());
    }
    return con;
}

ベストアンサー1

SQLite ではどのライブラリを使用していますか?

ご指定の接続URIに基づいて検索したところ、これです。 の中にドキュメンテーションそれはこう言います:

2009年5月19日: sqlite-jdbc-3.6.14.1 がリリースされました。このバージョンでは、JAR アーカイブに含まれる読み取り専用 DB ファイル、または URL、ローカル ファイル アドレスなどによって指定された外部リソースにアクセスするための "jdbc:sqlite::resource:" 構文がサポートされています (詳細

使用しているドライバーがこれである場合は、次の接続 URI をお勧めします。

"jdbc:sqlite::resource:DatabaseFile"

重要なのは、データベースがjarファイル内にあるため、ファイルとしてアクセスできないことですFileInputStream。代わりに、JVMのサポートを介してアクセスする必要があります(つまり、Class.getResource()またはClass.getResourceAsStream())。jar ファイル内に含まれるリソースは読み取り専用であることに注意してください。データベースに変更を保存することはできません。

おすすめ記事