SQLiteを使ったアプリを作っていたら、ごく稀にタイトルに書いたエラーがログに出力されていることに気がつきました。
ただし、同じ操作をしても再現できません。
ソースをよく見たらCursorのインスタンスをclose()し忘れている箇所が何カ所かありました。
おそらくclose()忘れが原因です。
Cursorが不要になったら直ちにclose()するようにしました。
以下のソースはint型の値をSQLiteに読み書きするキー・バリュー方式(?)のクラスです。
このクラスは汎用性が高いのでMtkはアプリケーションの設定情報を保存するためにを使い回してます。
キャッシュが肥大化しないようにVACUUMもします。
上記のソースのc.close()をわざと消して試してみましたが、エラーが起こらないことが多いです。
再現性がないので自動でがclose()してくれてるケースがあるのかもしれません。
SqliteSampleの使い方
1.int型データの保存方法
setIntメソッドで保存します。第1引数はキーとなる文字列、第2引数は保存する値です。
キーが既に保存されていれば値を上書きし、保存されていなければ新規に登録します。
2.int型データの取り出し方法
getIntメソッドで値を取り出します。キーに対応する値がなければgetIntの第2引数の値が返されます。
以上、参考になれば幸いです。
現在公開中
「お天気ロイド」
「Eye元気!」
「Wi-Fi sync screen」
いずれもキャッシュを肥大化させないためにVACUUMしています
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。