SQLiteの予約語でハマる
Androidでデータを保持するときの定番であるSQLite。実際にはSQLiteをそのまま使うよりもgreenDAOやOrmaなどのORMを使うことが多いと思います。
ORMはSQLiteをいい感じに隠蔽してくれますが、裏では普通にSQLiteを操作しているので当然制約事項もあるわけです。今回はそれを失念していてハマった話。
具体的には、テーブルのカラム名に「ORDER」とつけてしまったせいでSQLが謎のエラーを吐く、というものでした。しばらく悩んだ末、SQLite(と言うかRDB一般)には予約語というものがあることを思い出しました...
SQLiteの予約語一覧はSQLite Query Language: SQLite Keywordsにあります。ばっちりORDER乗ってますね...そりゃダメだ。他にもFROM, TO, KEY, GROUP, PLANあたりはうっかり使っちゃいそう。
回避策は
- そもそも予約語を使わない
- 予約語を呼び出すときはquotingしてあげる
- ' (single quote)
- " (double quote)
- [ と ]
- ` (grave accent)
です。予約語をquotingするために生のSQLを書いてしまうとORMの意味がなくなっちゃうので、予約語使わないのが無難ですね。
関連(するかもしれない)記事
おススメ