Мне нужно проверить таблицы в моей базе данных перед обновлением.База данных Android rawQuery: странное поведение курсора
I overrode SQLiteOpenHelper.onUpgrade(SQLiteDatabase db, int oldVer, int newVer)
в моей собственной базе данныхHelper для выполнения работы при расширении версии базы данных.
Я использую этот запрос на sqlite_master таблицы, чтобы получить имена таблиц: select * from sqlite_master
но курсор кажется пустым, даже если cursor.getCount()==29
(DB не пусто и содержит 29 объектов)
Тот же самый запрос большой в othes местах моей работы приложения ,
Я проверяю это на эмулированном Android 4.4 (API 19) в то время как мое приложение построено с
minSdkVersion 12
targetSdkVersion 24
Любой идеей об этом странном поведении?
Вот код:
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(); сначала –