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にアクセスするわけではないのでコンパイル云々のスピードは気にならないと思うけど、ワーニングが出てるのは気持ち悪いので修正をしておいた!