ローカルファイルシステム上の3つの異なるファイルで3つのSQLiteデータベースを使用するシングルスレッドアプリケーションがあります。SQLException:データベースがJDBC 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.close
へのすべての呼び出しを記録しています。 open()
があるたびに、close()
が近くに続きます。
また、Statement
をすべて閉じるように注意しています(これにより、関連するResultSet
も閉じます)。
私はデータベースのアクセスができるだけ短くしようとしているので、データベースのアクセスがきれいで、不要になったらすぐにすべてのリソースを解放すると思います。
まだ、私はまだjava.sql.SQLException: database is locked
を取得しています。
私が正しく行っていないことはありますか?私はコードを表示していないことを知っていますが、たくさんのコードを投稿しなければならず、関連性がありません。私はここでベストプラクティスを使用しているかどうかを尋ねています。なぜなら、私はそう思っています。
この
は、Java 1.6であり、Xerial.orgのsqliteの-JDBC-3.7.2ドライバはMac OS 10.6のx64
古いアプリケーションプロセスがまだ実行されている可能性がありますか?これはまだ再起動後に来るのですか?なぜなら、私が知っている限り、1つのスレッドではなく埋め込みDBごとに1つのプロセスだからです。 – Thihara
[java.sql.SQLException:database locked]の可能な複製(http://stackoverflow.com/questions/2578623/java-sql- –
@灰原:すべてのJavaプロセスを 'kill -9'しました。まだ –