私の問題の原因が見つかりました。それは重複としてマークされているので、私自身の質問を嫌うが、自分の質問の下で私の最後のコメントを参照してください。バックアップ機能は同じバージョン番号の古いデータベーススキームを取得したので、onUpdate()またはonCreate()はSQLiteHelperClassで呼び出されませんでした。新しくインストールされた署名付きAPKのSQLLite 'そのような列はありません'
私は解決できない奇妙な問題が発生しています。私はエミュレータで私のアプリを実行すると、すべてが大丈夫です。私は自分の携帯電話上のapk-debug.apkとしてそれを実行すると、すべてがOKですが、私は自分の携帯電話に署名したアプリとしてそれを実行しようとすると、私はこのエラーを取得する:
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(no such column: listId (code 1): , while compiling: SELECT * FROM mytable WHERE listId=100 ORDER BY id,name,conc ASC)
私はすべて削除した場合設定のアプリデータはアプリを再実行しますが、最初は電話に初めてインストールされたものの、署名されたアプリバージョンではすべて動作します!
MYTABLEがdb.execSQL(DATABASE_CREATE_MY_TABLE)を実行することによって作成されます(列名が他の場所で設定された定数である)
private static final String DATABASE_CREATE_MY_TABLE = "CREATE TABLE "
+ MY_TABLE + "("
+ ID + " INTEGER, "
+ LIST_ID + " INTEGER, "
+ NAME + " STRING, "
+ CONC + " REAL, "
+ "PRIMARY KEY (" + ID + "," + LIST_ID + ")"
+ ")"
このエラーを作成するコードは以下の通りである:
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + MY_TABLE + " WHERE " + LIST_ID + "=?" + " ORDER BY " + NAME + "," + CONC + " ASC";
Cursor cursor = db.rawQuery(selectQuery, new String[] {listId});
私の主な問題は、署名されたapkの最初のインストール時に作成されないようだが、app-dataを削除して署名付きapkを再作成した場合に作成される列LIST_IDです。電話機のエミュレータとdubug.apkで毎回作成されます。
String selectQuery = "SELECT * FROM " + MY_TABLE + " WHERE " + LIST_ID + "=" + listId + " ORDER BY " + NAME + "," + CONC + " ASC";
Cursor cursor = db.rawQuery(selectQuery, null);
をし、少しデバッグのためにそれを修正:
私が試した
String selectQuery = "SELECT * FROM " + MY_TABLE + " WHERE " + ID + "=?" + LIST_ID + "=?" + " ORDER BY " + NAME + "," + CONC + " ASC";
Cursor cursor = db.rawQuery(selectQuery, new String[] {id, listId});
を結果と同じエラーで。異なる列を試しましたが、listIdはすべての場合にエラーを引き起こす列です。しかし、署名されたapkを自分の携帯電話で実行しているときのみ。それはanythigを意味する場合、私の携帯電話はサムスンS6です。私は私のアプリは、このコードのデータベースを最初にインストールで作成されていないことを私に示して
SQLiteDatabase db = this.getWriteableDatabase();
でそれを使って何をする前に、データベースの作成を強制しようとしたデバッグ対策として
。実際には、アンインストールの作業にもかかわらず、古いバージョンのデータベースが存在するようです。したがって、私はデータベースのバージョンを増やし、最初のインストール時にonUpgrade()が呼び出されました!
署名されたapkとして最初にインストールしたときにデータベースが正しく作成されないか、アンインストールで正しく削除されないようです。
私のコードや他の箇所でエラーを見つけられないようですが、私は盲目的になり始めていますが、他の誰かがバグを見ることができるか、前にこのようなことを経験しており、 。
アプリを削除して再インストールして、古いバージョンのデータが原因ではないことを確認しましたか? –
はい、何度も。何度も何度も繰り返します。これは、署名したビルドだけです。 – user1086500
クリーンインストールから開始して、すべてのsql create/select文を記録します。おそらく誰かが何かを見つけられる可能性があるならば、エラーまでそれらの行を最悪の状態で投稿してください。 –