Androidのデータベース操作で無茶したら裏でエラー出てた

こんなログが出てた。

E/CursorWindow(4910): need to grow: mSize = 4194304, size = 69, freeSpace() = 68, numRows = 12849
E/CursorWindow(4910): not growing since there are already 12849 row(s), max size 4194304
E/Cursor(4910): Failed allocating 69 bytes for text/blob at 38483,10

で、グーグル先生に聞いてみた。

というわけで、あんまり大きいサイズの結果を受け取ることはできないよ!ってことかな。


上のページにもあるけど「10,000ものデータを3.5インチの画面でどうするの?」ってのは確かにそうだな…。
今回は、元々ちゃんと少量のデータを受け取るクエリだったんだけど、「全部持ってこい!」スイッチってのもあって最後にそれを試したらこんなことに!


というわけで、全部持ってくるにしてももう少し条件絞ってから、それを全種類持ってくるとかしなさいってことか。
”とりあえず”で触ってるとデータベースは厳しいな…。

compiled-sql statement cacheのワーニング

こっちはワーニング。

05-23 17:05:46.892: W/Database(6845): Reached MAX size for compiled-sql statement cache for database...
Please change your sql statements to use '?' for bindargs, instead of using actual values

で、グーグル先生に聞いてみた。

あ〜成る程ね〜。
sqlを文字列で毎回作るんじゃなくて、毎回変わる部分は ? を使ってそこに変数を当てはめなさい!ってことか。
"compiled-sql statement cache"ってあるんだから、使い回すとキャッシュされて毎回 sqlコンパイルするより早いんだな!


ま、実際にはそんなにガシガシ DBにアクセスするわけではないのでコンパイル云々のスピードは気にならないと思うけど、ワーニングが出てるのは気持ち悪いので修正をしておいた!