ローカル ファイル システムの 3 つの異なるファイルで 3 つの SQLite データベースを使用するシングル スレッド アプリケーションがあります。
DbAdapter
SQLite データベース ファイルへの接続を開くヘルパー クラスを作成しました。このクラスにはopen
、接続を作成するclose
メソッドと、すべてを解放するメソッドがあります。
3 つのデータベースは、派生するクラスからアクセスされますDbAdapter
。
私のプログラムでは、すべてのデータベース アクセスは次のようになります。
MyDbAdapter DB = new MyDBAdapter();
int stuff = DB.getStuff(); // queries the database
DB.close();
// now do something with `stuff`
stdout
と へのすべての呼び出しをDbAdapter.open
ログに記録しましたDbAdapter.close
。がいるたびにopen()
、close()
近くをフォローします。
また、すべての を閉じるように注意しますStatement
(これにより、関連ResultSet
する も閉じられます)。
したがって、データベースへのアクセスはできるだけ短くしようとしているので、クリーンであると思います。必要がなくなったらすぐにすべてのリソースを解放します。
それでも、私はまだ取得していjava.sql.SQLException: database is locked
ます。
私が正しくやっていないことはありますか?コードを表示していないことはわかっていますが、大量のコードを投稿する必要があり、関連性がありません。ここでベストプラクティスを使用しているかどうかを尋ねているだけです。そうしていると思いますが、まだ例外が発生しているためです。
これは、Mac OS 10.6 x64 上の Java 1.6、Xerial.org の sqlite-jdbc-3.7.2 ドライバーを使用したものです。