SQLiteの履歴
ここではAndroidで利用する時のSQLiteについてメモります。
SQLDatabaseクラスのqueryメソッド
inner joinとかで繋げたVIEWを条件付きでselectしたら例外が帰ってきた。
select * from VIEW where row1 = "条件"
このrow1はVIEWにおいて明確に名前が決められていなかった(TABLE.row1としておりTABLE.row1 AS row1としてなかった)ために列名として不正だったらしい。SQLite用のツールでは普通にこれでもselectできるので、はまった。
SQLクエリで他のSQLと違うポイントなど
SQLiteではSQL文の最後は必ず「;」で終わらなければならない。でないと文の終わりを認識できないらしい。SQL文単体での発行なら問題は無い。Triggerなどのストアドチックなことをしたい場合は覚えておかないとね!
SQLiteが遅い?
disk I/O error
大したレコード数をselectしてないのにdisk I/O errorが帰ってくる場合がある。件数によってはOrder Byはかなりの負荷がかかるし、Where句でもそれは同じ。そして容量オーバーを迎えたら上記エラーが返る。絶対的解決法ではないが、各条件カラムに対してCreate INDEXをつけるのが最も簡単で有効な方法。
Cursor
SQLiteを使いまわしてるとすんごく遅くなってきた。SQLite微妙じゃね?とか思ったけど、そうじゃなくって一番ネックなのはCursorの読みだし処理部分。1行読み出すたびにjavaのObjectを作りなおしては破棄してるって感じか。
http://d.hatena.ne.jp/androidzaurus/20090510/1241954422