rawquery android,Android数据库rawQuery:奇怪的游标行为

在升级之前,我需要检查数据库中的表。

我在我自己的DatabaseHelper中覆盖SQLiteOpenHelper.onUpgrade(SQLiteDatabase db, int oldVer, int newVer)以在数据库版本增加时执行此项工作。

我在sqlite_master表上使用这个查询来获取表名:select * from sqlite_master,但是即使cursor.getCount()==29(DB不是空的并且包含29个对象),光标也是空的,

同样的查询在我的APP的地方很有用。

我在模拟的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();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值