SQLiteの予約語でハマる

2016/05/29

Androidでデータを保持するときの定番であるSQLite。実際にはSQLiteをそのまま使うよりもgreenDAOOrmaなどの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の意味がなくなっちゃうので、予約語使わないのが無難ですね。




関連(するかもしれない)記事


おススメ