会社の内部アプリのユーザーが sqlite クエリを実行していないという奇妙な問題が発生しています。次のエラーでクラッシュします。
android.database.sqlite.SQLiteException: no such column: intCol3 (code 1 SQLITE_ERROR): , while compiling: SELECT primaryKey, intCol1, textCol1, intCol2, textCol2, textCol3, intCol3 FROM table WHERE intCol4='1' LIMIT 100
intCol3
インストールしようとしてintCol4
いる新しいバージョンのこのテーブルに追加された新しい列です。ただし、削除するintCol3
とエラーが発生しintCol4
、それも削除すると、primaryKey に問題があります。
最初は、これは彼が自分の電話に Android 9 を持っている唯一のユーザーであることに関連していると思っていましたが、別の Android 9 デバイスで試してみると問題なく動作しました。彼が自分の Google アカウントをデバイスにリンクさせたのは、このクエリを破った 2 番目のようです。
アプリを新たにインストールし、すべてのアプリ データと彼の携帯電話にキャッシュされたものをすべてクリアしようとしましたが、それでもこの例外がスローされます。
また、ログインを試みるたびに「欠落」列を作成するようにコードに追加しようとしましたが、違いはありません。
誰かが似たようなものに出くわしたり、どこを見るべきかについて正しい方向に私を向けることができますか? これは私onCreate
とonUpgrade
@Override
public void onCreate(SQLiteDatabase db) {
try {
createTables();
} catch (Exception e) {
Log.d("Error:","Failied to build tables:" + e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.v("*! dbHelper upgrade", "Update contacts");
db.execSQL("DROP TABLE IF EXISTS contacts");
onCreate(db);
}
public void createTables() {
SQLiteDatabase db = this.getWritableDatabase();
Log.v("*! dbHelper create", "Create contacts");
db.execSQL(
"create table contacts " +
"(cnId integer primary key, cnName text, cnDate date)"
);
db.execSQL(
"create table parts " +
"(primaryKey integer primary key, intCol1 integer, textCol1 text, intCol2 integer, textCol2 text, textCol3 text, intCol3 integer, intCol4 integer)"
);
}