我有
public boolean isEmpty()
{
if (database == null) {
database = dbHelper.getReadableDatabase(); // or similar method that
}
Cursor cursor = database.rawQuery("SELECT COUNT(*) FROM " + DatabaseHelper.TABLE_ENCOURAGEMENTS, null);
if (cursor != null) {
return false;
} else {
return true;
}
}
但是当我在空数据库上运行它时,它会崩溃。
有什么建议吗?
错误是:
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:2144)
Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested,
with a size of 0
答案 0 :(得分:3)
Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested,
with a size of 0
我认为您需要将您的条件修改为:
public boolean isEmpty() {
int count = -1;
if (cursor != null && cursor.moveToFirst()) {
count = cursor.getInt(0);
if (count > 0) {
return false;
}
else {
return true;
}
}
return true;
}
moveToFirst()是一种方便的方法,如果Cursor为空,则返回 false 。检查Cursor是否已分配给NULL
是不够的。您需要始终调用它来检查Cursor的状态,因为每个Cursor都隐式定位在第一行之前,因此您需要始终调用它。
由于您选择的是COUNT(*)
,因此它始终至少返回一行带有计数值的行。您需要检查此值是否大于零。如果是,则db不为空。
答案 1 :(得分:0)
好吧,也许dbHelper没有返回数据库。您应该再次检查数据库是否为空。
public boolean isEmpty()
{
if (database == null) {
database = dbHelper.getReadableDatabase(); // or similar method that
}
if (database != null) {
Cursor cursor = database.rawQuery("SELECT COUNT(*) FROM " + DatabaseHelper.TABLE_ENCOURAGEMENTS, null);
if (cursor != null) {
return false;
} else {
return true;
}
}
}