30

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

Project/DatabaseFile

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

No such table : table1

これは、データベースに到達できないことを意味します。結果の JAR ファイルの内容を調べたところ、データベース ファイルはもう存在していませんでした。

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

jdbc:sqlite:DatabaseFile

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

編集

ソースフォルダーに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;
}
4

2 に答える 2

46

SQLite に使用しているライブラリは何ですか?

あなたが示した接続URIに基づいて検索を行い、これを見つけましドキュメントには次のように書かれています。

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

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

"jdbc:sqlite::resource:DatabaseFile"

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

于 2012-08-19T15:40:32.863 に答える
3

アクセスしようとしている方法に応じて、ファイルパスに名前を付ける 2 つの異なる方法を見つけました。アクセスしているデータベースが /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);

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

于 2013-03-07T06:19:18.140 に答える