2011-06-15 91 views
4

对于我的生活,我无法获得游标返回任何数据。我已验证他们是数据库中的数据,并且我的插入正在工作。官方的错误是:Android SQLLiteDataBase游标返回0行

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); 

请给我你的想法!谢谢!!

+0

+1在db ...中使用SQLiteOpenHelper类 – 2011-06-15 18:37:25

+0

是COLUMN_A = 0? ...什么是“兰特”? – Stuck 2011-06-15 18:40:42

+0

STRING COLUMN_A =“_id”;对不起,应该包括那个。 – RedLeader 2011-06-15 18:56:13

回答

2

这里什么都没有。看来您每次都在查找值为0的column_a。

我会假设,column_a有什么用0

+0

我随机将问题隔离到光标。无论我是否查找COLUMN_A = 0,1,2 ....(其中COLUMN_A是数据库中的_id列)。 – RedLeader 2011-06-15 18:57:15

+0

如果不添加'where'子句,Cursor的外观如何? – 2011-06-15 19:02:04

+0

增加了两条记录。如果没有'where',日志会正确报告cursor.getCount()= 2。 – RedLeader 2011-06-15 19:12:44

2

首先尝试查询这样的值:

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

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

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