2011-06-15 72 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); 

如果這不利於與外部工具檢查您的數據庫,如果你查詢在那裏返回行。