我正在尝试检查ID
表中字段BangCauHoi
的值。
这是我的功能:
public boolean checkID(String ndCauHoi){
boolean check = true;
String query = "select ID from BangCauHoi where CauHoi=?";
Cursor c = database.rawQuery(query, new String[] { ndCauHoi });
if (c != null)
{
c.moveToFirst();
if (c.isNull(c.getColumnIndex("ID")))
{
check = false;
}
}
c.close();
return check;
}
结果:
java.lang.RuntimeException: Unable to start activity ComponentInfo{us.datn_02/us.datn_02.ShowQuestion}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
有人可以帮我吗?
如果我将代码更改为:
public boolean checkID(String ndCauHoi){
boolean check = true;
String query = "select ID from BangCauHoi where CauHoi=?";
Cursor c = database.rawQuery(query, new String[] { ndCauHoi });
if (c.moveToFirst())
{
if (c.isNull(c.getColumnIndex("ID")))
{
check = false;
}
}
c.close();
return check;
}
然后它始终返回true
,即使字段ID
与此where
子句没有任何值。
请帮帮我!... 抱歉,因为我的英文。
答案 0 :(得分:2)
您的数据库没有选择任何行,moveToFirst()
返回false。如果未选中,您将获得有关尝试从不存在的行检索值的例外情况。选中后,它会返回您指定的默认值true
。
答案 1 :(得分:1)
您可以使用以下语句检查它是否为空:
if (c.moveTofirst() && c.getCount > 0)
或
if (c != null && c.moveToFirst())
至于为什么它是空的,我猜你在某处错误地输入了一个声明。我总是使用query
类中的SQLiteDatabase
method而不是rawQuery
,并使用常量作为我的列名而不是硬编码来尝试避免这些问题。
public static final String KEY_ID = "_id";
public static final String TABLE_NAME="BangCauHoi";
public static final String CAUHOI = "CauHoi";
Cursor c = yourDatabaseInstance.getReadabledatabase().query(
YourDatabaseName.TABLE_NAME,
new String[] { YourDatabaseName.KEY_ID },
YourDatabaseName.CAUHOI + "=?",
new String[] { ndCauHoi },
null, null, null);