22時に寝ようと思って2時に寝る。

備忘録や日記を書いてます。きょうは早く寝よう。

SQLiteでno such columnが出た

Androidアプリ開発でSQLiteを扱っていてno such columnというエラーが出た。

今回は、Androidアプリ外(sqliteBrowserなど)で作成したデータベース(hoge.db)をassetsにコピーして読み込み、活用しているパターンです。

発生したタイミング

  • データベースの内容を更新し、assets内にある古いデータベースから新しいデータベースに入れ替えた。
  • 中身だけ更新しているのでデータベース名は一緒。
  • エミュレータで実行。
  • 「おめーの定義したcolumnねぇから!!」

原因

  • 通常デバッグするときは、エミュレータ内に既にインストールされている開発中のアプリにさらに上書きする形だが、データベース自体は上書きされていないことがある。
  • 名前が一緒だと更新されないで再利用される?
  • ということなので、更新して新しいSQL文に書き換えても古いデータベースを参照し「存在しないカラムがある」というエラーが出た。

解決方法

  • 一度、エミュレータ内にインストールされた開発中のアプリをアンインストールし、再度デバッグを実行する。

実は、no such columnエラーは二度目で、ずっとSQL文とにらめっこしていた。