2014-01-17 77 views
0

我試圖搜索這個,但也許我找不正確。搜索SQLite數據庫並使用檢索行中的值進行計算

這是一個android應用程序。基本上,我想根據一些標準(例如子類別和項目名稱)搜索數據庫,然後使用該行中的其他數據值進行計算(例如獲取價格值,並將其用於計算)

我想是這樣的查詢..

Cursor d = db.rawQuery("SELECT * FROM prices WHERE subcat = 'meat' AND item = 'lamb' ") 

現在我需要檢索的列(如價格),並使用這些值來計算類似均價..我會怎樣去做? (假設第1步是正確的)...

+0

你可以看看這裏的答案http://stackoverflow.com/questions/9886740/how-to-retrieve-value-from-the-sqlite-database – user3182577

+0

一個例子是,我可以使用它從選定的一組行計算平均價格。像那樣的東西? – Clam

回答

2

您可以使用aggregate functions爲基於多個記錄中列的值的單值:

SELECT AVG(price) FROM prices WHERE subcat = 'meat' AND item = 'lamb' 
+0

我也可以在sql語句中寫入算術表達式嗎?是的? – Clam

+0

是的。請閱讀一些SQL教程。 –

0

爲您的產品一類說

Class AnimalProduct{ 
Sting cat, subcat, item; 
int price;} 

然後在數據庫上運行的查詢(我假設你有列貓,SUBCAT,項目價格) 根據您的標準說項目=「羊肉」

public ArrayList<AnimalProduct> getItem(String item) 
{ 

    ArrayList<AnimalProduct> aps = new ArrayList<AnimalProduct>(); 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(YOURTABLE, 
      KEY_CAT, KEY_SUBCAT, KEY_ITEM, KEY_PRICE, 
      KEY_ITEM + " = ?" , new String[] {item }, 
      null, null, null, null); 

    if (cursor.moveToFirst()) 
    { 
     cursor.moveToLast(); 
     do {     
      AnimalProduct t = new AnimalProduct(); 

      t.cat  = cursor.getString(0); 
      t.subcat = cursor.getString(1); 
      t.item = cursor.getString(2); 
      t.price = Integer.parseInt(cursor.getString(3)); 

      tList.add(t); 
     } while (cursor.moveToPrevious()); 
    } 

    cursor.close(); 
    db.close();   
    return aps; 
} 

一旦你在你的代碼中得到這個列表,你將很容易地做出任何需要的計算。

1

創建遊標後,獲取要讀取的列的索引。例如,如果通過SELECT *返回的列的一個是價格,下面給出每個光標行中該列的位置:

int PRICE_INDEX = d.getColumnIndexOrThrow("price"); 

然後,你需要遍歷結果集。對於每一行,使用適當的'get'方法來提取值。在這裏,我認爲價格是對數據庫的INTEGER,因此getInt():

while (d.moveToNext()) 
{ 
    int price = d.getInt(PRICE_INDEX); 
    //Do whatever calculation you need with price here, or add to an array to process later 
} 

記住關閉遊標當你完成它:

d.close(); 

如果你能做到的計算在SQL中,那麼CL的答案會更好。在這種情況下,只有一行被返回,所以不需要循環 - 只需使用d.MoveToFirst()然後d.getInt(0)。您可以安全地執行getInt(0),因爲您只返回SELECT中的單個列。