2

SqlLiteファイルへの読み書きを管理するためのJavaでの最良の(最高のパフォーマンス)方法は何ですか?

1. 接続オブジェクトを 1 つ作成する

Connectionアプリの起動時に単一のオブジェクトを作成して共有します。この場合、呼び出しを同期/シリアル化する必要がありますか? Javaプログラマーは、悪いコードが接続を悪い状態のままにしたり、閉じられていないステートメントなどを残したりするのを防ぐために、常に接続を閉じることを好むようです...

2. トランザクションごとに接続を開いたり閉じたりする

上記の問題を回避し、将来必要に応じてマルチスレッド環境でコードを実行できるようにしますか? また、一部のモバイル バージョンの Java ではこの動作が必要になる場合があることも読みました。

他の誰かがこの分野ですでに経験を積んでおり、それを共有できることを願っています。そうでなければ、私は苦労して学ぶ必要があります. それが違いを生む場合、私はxerial jdbcドライバーを使用しています

4

1 に答える 1

1

SQLiteは3つの異なるスレッドモードをサポートしています。

  • シングルスレッド。このモードでは、すべてのミューテックスが無効になり、SQLiteを一度に複数のスレッドで使用することは安全ではありません。

  • マルチスレッド。このモードでは 、2つ以上のスレッドで
    単一のデータベース接続が同時に使用されない限り、SQLiteを複数のスレッドで安全に使用できます。

  • シリアル化。シリアル化モードでは、SQLiteは制限なしで複数のスレッドで安全に使用できます。

詳細については、http://www.sqlite.org/threadsafe.htmlを参照してください。

私が遭遇したマルチスレッドの問題の1つは、別のスレッドのResultSetから読み取りを行っているときに、あるスレッドの接続を閉じた場合です。ネイティブライブラリを使用すると、致命的なアクセス違反エラーが発生し、JVMプロセスがクラッシュします。コードでこの状態を検出する必要があり、ResultSetから読み取ったり、ResultSetを閉じたりする必要はありません。

于 2013-02-11T19:23:01.723 に答える