DatabaseHelper.onCreate()の走るタイミング


え?table users has no column named name (code 1)??

sqliteデータベースを作成し、値を格納しようとしたときに発生した。
SQL文は間違ってないはずなのになぁ。

エラーの意味

そもそもこのエラーは何を意味しているのか。
エラーコードを読むとわかるが、指定したカラム(列)が存在しませんよ。というエラーだ。

主な原因:

このエラーが発生してからググりまくって調べたところ、主に以下の点が主な原因みたい。

  • SQL文のミス:
    打ち間違いや文法ミスによるもの。

  • onCreate(SQLiteDatabase db) {}実行タイミング:
    私がハマっていたのはこちら。
    データベースが作成される際にonCreate()も実行される。
    データベースが作成されている状態のまま、プログラムが走ると、onCreate()には処理がいきません。
    そのため、onCreate()で使うSQL文を一生懸命直しても意味がありません。。。
    解決するには、アプリをアンインストールするか、deleteDatabase("sample.db");でデータベースを削除します。

おわりに

言われてみればそりゃそうだって感じですが、ぼーっとしていたら見落としてしまう。
基本的なところにこそ落とし穴があるのかなぁ。