web-dev-qa-db-ja.com

実行可能なJARにSQLiteデータベースを含める方法は?

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

Project/DatabaseFile

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

No such table : table1

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

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

jdbc:sqlite:DatabaseFile

私の質問は、SQLiteデータベースを実行可能なJARに含める方法ですか?

[〜#〜]編集[〜#〜]

ソースフォルダーProject/src/DatabaseFileにDBファイルを配置し、パスを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;
}
29
outellou

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

指定した接続URIに基づいて検索を行ったところ、 これ が見つかりました。 documentation には次のように書かれています:

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

それがあなたが使用しているドライバーである場合、私は次の接続URIを提案します:

_"jdbc:sqlite::resource:DatabaseFile"
_

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

36
dsh

アクセスしようとしている方法に応じて、ファイルパスに名前を付ける2つの方法を見つけました。 dbにアクセスしていると仮定すると、/ yourproject/resource /または/ yourproject/bin/resourceにあります(絞り込んでいないので、両方にありますが、満足しています)。これをパスとして使用してください。

//Eclipse test path
String url = "jdbc:sqlite:resource/mydb.db";

または

//runnable jar path
String url = "jdbc:sqlite::resource:mydb.db";

その後

mysqlitedatasource.setUrl(url);

あなたのやり方もうまくいきます... dbを/ srcに置くことによって

3
tricknology