アップグレードする前にデータベースのテーブルをチェックする必要があります。AndroidデータベースのrawQuery:奇妙なカーソルの振る舞い
データベースのバージョンが増加すると、私自身のDatabaseHelperでSQLiteOpenHelper.onUpgrade(SQLiteDatabase db, int oldVer, int newVer)
が上書きされます。
:同じクエリが私のAPPのothesの場所で素晴らしい作品
(DBが空でなく、29個のオブジェクトを含む)select * from sqlite_master
をしかし、カーソルもcursor.getCount()==29
場合は、空のようです。私のアプリが
minSdkVersion 12
targetSdkVersion 24
この奇妙な振る舞いについての任意のアイデアを使用して構築されている間
私は、エミュレートのAndroid 4.4(API 19)でこれをテストしていますか?ここで
コードです:
public class DatabaseHelper extends SQLiteOpenHelper {
public static DatabaseHelper getHelper(Context context) {
if (instance == null)
synchronized(DatabaseHelper.class) {
if(instance==null)
instance = new DatabaseHelper(context.getApplicationContext());
}
return instance;
}
private DatabaseHelper(Context c) {
super(c, DB_NAME, null, 6 /* version */);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
final boolean inTransaction = db.inTransaction();
if(!inTransaction)
db.beginTransaction();
Cursor cur = null;
try {
// cur = db.query("sqlite_master", null, null, null, null, null, null); // SAME BEHAVIOUR
cur = db.rawQuery("select * from sqlite_master", null);
int count = cur.getCount(); // ASSIGN 29 TO COUNT
while(cur.moveToNext()) {
** NEVER ENTERS HERE **
}
if(!inTransaction)
db.setTransactionSuccessful();
} catch (Exception e) {
log.e(DBTAG, e.getMessage(), e);
} finally {
if(cur!=null)
cur.close();
if(!inTransaction)
db.endTransaction();
}
}
}
私はあなたがcursor.moveToFirst()を使うべきだと思います。最初に –