2011-05-08 27 views
2

我想從Sqlite數據庫中獲得總計數。以下是我正在嘗試做的事情的代碼片段。如何獲得來自SQLite的記錄總數

我不知道我在做什麼錯在這裏?

public static int getTotalCount(Context _context) 
{ 
Cursor c = null; 
try 
{ 
    c = getInstance(_context).db.rawQuery("SELECT COUNT(word) FROM " 
     + WORD_TABLE, null); 

    return c.getInt(c.getColumnIndex(WORD_COL)); 

} catch (Exception e) 
{ 
    Log.e("getTotalCount", e.toString()); 
} 
return 0; 

異常消息: 5月5日至8日:21:19.934:ERROR/getTotalCount(440):android.database.CursorIndexOutOfBoundsException:索引-1請求,其尺寸爲1

enter image description here

回答

3

嘗試c.getInt(0);

c = getInstance(_context).db.rawQuery("SELECT COUNT(word) as WORD_COL FROM " 
    + WORD_TABLE, null); 

也把c.moveToFirst();的rawQuery線的良好措施之後。

2

假設WORD_COLword?您尚未請求名爲word的列。你有一列COUNT(word),這是一個完全不同的問題;因此當您嘗試獲取word的數據時,getColumnIndex未能找到它,給您一個無意義索引-1,然後導致getInt失敗,因爲沒有人從-1開始計數。 :)

您也可以將列重命名爲更好:SELECT COUNT(word) AS word_count FROM...,然後請求該名稱。另一種選擇是,你知道這個查詢只返回一列,不需要命名它;只是直接使用它的索引。

1

rawQuery後,嘗試

c.moveToFirst(); 
return c.GetInt(0); 
0

你是有這CursorIndexOutOfBoundsException因爲遊標犯規指向第一個結果。

試試這個:

try 
{ 
    c = getInstance(_context).db.rawQuery("SELECT COUNT(word) FROM " 
     + WORD_TABLE, null); 
    c.moveToFirst(); 
    return c.getInt(c.getColumnIndex(WORD_COL)); 

} catch (Exception e) 
1

試試這個:

Cursor c = _sqlDatabase.rawQuery("Select * from table", null); 
System.out.println("Count:"+c.getCount()); 

問候, 硝酸乙醇沙阿

+0

這將獲取表中的所有行,他只是想知道計數。 – 2011-05-25 16:26:24

+0

這並不重要..查詢簡單或更復雜的查詢(只是計數或提取數據)與少量數據的成本差異是如此之小,它支付更多的東西來獲取所有內容並計算結果..然後,他可以即使使用結果也不會再次詢問 – Ewoks 2013-03-05 10:53:32

相關問題