Android SQLLiteDataBase游标返回0行

时间:2011-06-15 18:33:28

标签: java android sql database cursor

对于我的生活,我无法让光标返回任何数据。我已经验证了他们是数据库中的数据,我的插入工作正常。官方错误是:

  

CursorIndexOutOfBoundsException:请求索引0,,大​​小为0

顶级声明:

private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx) 
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
    this.db = this.DBHelper.getWritableDatabase();
}

我的功能:

public String getRandomEntry()
    {
    int rand;
    Random random = new Random();
    int numEntries = (int)this.getCount();

    if(numEntries == 0)
        return "ERROR: Database is empty.";
    rand = random.nextInt(numEntries);

    Cursor cursor = DBHelper.getWritableDatabase().rawQuery(
            "SELECT * FROM " + DATABASE_TABLE 
            + " WHERE " + COLUMN_A + " = " + 0, null);

    Log.i("numEntries", Integer.toString(numEntries));
    Log.i("rand", Integer.toString(rand));
    Log.i("cursor", Integer.toString(cursor.getCount()));

    cursor.moveToFirst();
    return cursor.getString(0);
}

我也试过抓住光标:

Cursor cursor = db.rawQuery(
            "SELECT * FROM " + DATABASE_TABLE 
            + " WHERE " + COLUMN_A + " = " + 0, null);

请告诉我你的想法!谢谢!!

2 个答案:

答案 0 :(得分:2)

这里似乎没有随意的东西。您似乎每次都在寻找值为0的column_a。

我认为column_a没有任何值为0的内容。

答案 1 :(得分:2)

首先尝试以这种方式查询:

String args[] = new String[]{"0"};

Cursor cursor = db.rawQuery(
        "SELECT * FROM " + DATABASE_TABLE + " WHERE " + COLUMN_A + " = ?", args);

如果在那里查询返回行,如果这不利于使用外部工具检查数据库。