2016-08-30 10 views
1

私はいくつかのテーブルを持つsqliteデータベースを持っています。そのうちの1人は生徒会と呼ばれました。私のコードの中で、私はselect、insert、updatesのテーブルを十分に呼び出しています。Sqliteの問題:データベースファイルがロックされています

ます。java.sql.SQLException:[SQLITE_BUSY]データベースファイルがロックされている(データベースがロックされている)

呼び出しの一例は、以下である:

しばらく私は、メッセージを受信して​​い
String query3 = "select * from studentssession where id= ? and math= ? and level = ?"; 
    PreparedStatement pst__ = connectionUsers.prepareStatement(query3); 
    pst__.setString(1, x); 
    pst__.setString(2, x1); 
    pst__.setString(3, x2); 
    ts2 = pst__.executeQuery(); 

私は、準備された声明をいつも閉じているかどうかを判断しようとしており、これが私の問題の原因となっている場合があります。

EDIT:javafxbuttonなどを使用して、データベースに開いている可能性のある参照をチェックすることはできますか?

EDIT:テーブルへの参照に問題があるかどうかチェックして、それらを見つけて閉じることができる方法はありますか?

+0

これはおそらく、sqliteデータベースへの複数の開いている参照があるためです。 –

+0

はい、これは当てはまりますが、どうすればそれらを閉じることができますか?私は、これらすべての参照をチェックする方法があるのでしょうか?これが準備文と関係している可能性はありますか? – konstantin

+0

あなたのコードを閉じます。pst __。connection.close(); –

答えて

1

これはおそらく、sqliteデータベースへの複数の開いている参照があるためです。 私はwhileループ内のfinallyブロックでPreparedStatementを閉じることから始めます。

PreparedStatement pst__ = null; 
try{ 
    pst__ = connectionUsers.prepareStatement(query3); 
    pst__.setString(1, x); 
    pst__.setString(2, x1); 
    pst__.setString(3, x2); 
    ts2 = pst__.executeQuery(); 
}finally{ 
    if(pst__ != null) { 
    pst__.close(); 
    } 
} 

また、すべての最後にデータベース接続を閉じる必要があります。

また、SQLiteに接続するときに複数の接続を使用することは悪い習慣です。 1へのあなたのプールサイズのMAXACTIVEを設定し、試してみる

http://touchlabblog.tumblr.com/post/24474398246/android-sqlite-locking

を参照してください。

+0

それはpst __であるべきですか?close();またはpst __。connection.close();コメントの中で提案しているように? – konstantin

+0

公開されている可能性のある参照を確認することはできますか? – konstantin

関連する問題