1

SQLite4Java を使用して SQLite データベースに接続する Java プログラムを作成しました。

シリアル ポートから読み取り、値をデータベースに書き込みます。これは最初はうまくいきましたが、今ではプログラムが大きくなり、いくつかのスレッドができました。私は、次のようなデータベース操作を実行する SQLiteQueue 変数でそれを処理しようとしました:

public void insertTempValue(final SQLiteStatement stmt, final long logTime, final double tempValue)
{
    if(checkQueue("insertTempValue(SQLiteStatement, long, double)", "Queue is not running!", false))
    {
        queue.execute(new SQLiteJob<Object>()
                {
                    protected Object job(SQLiteConnection connection) throws SQLiteException
                    {
                        stmt.bind(1, logTime);
                        stmt.bind(2, tempValue);

                        stmt.step();
                        stmt.reset(true);

                        return null;
                    }
                });
    }
} // end insertTempValue(SQLiteStatement, long, double)

しかし、現在、私の SQLite クラスはステートメント レポートを実行できません。

DB[1][U]: disposing [INSERT INTO Temperatures VALUES (?,?)]DB[1][U] from alien thread
SQLiteDB$6@8afbefd: job exception com.almworks.sqlite4java.SQLiteException: [-92] statement is disposed

したがって、実行は行われません。

何が問題なのかを突き止めようとしましたが、他のスレッドが通過する単一のスレッドからすべてのデータベース操作呼び出しを行う Java ラッパーが必要だと思います。

これが私の問題です。これを適切に実装する方法がわかりません。メソッド呼び出しを行い、それが常に同じスレッドから実行されるようにするにはどうすればよいですか?

4

2 に答える 2