搜索SQLite数据库并使用检索到的行中的值进行计算

时间:2014-01-17 13:54:22

标签: android sql sqlite search calculated-columns

我试图搜索这个,但也许我正在寻找它。

这适用于Android应用。 基本上,我想根据一些标准(例如子类别和项目名称)搜索数据库,然后使用行中的一些其他数据值进行计算(例如,获取价格值,并将其用于计算)< / p>

我认为它就像这个查询..

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

现在我需要检索一个列(比如价格)并使用这些值来计算平均价格之类的东西。我该怎么做? (假设步骤1是正确的)......

3 个答案:

答案 0 :(得分:2)

您可以使用aggregate functions根据多个记录中的列值计算单个值:

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

答案 1 :(得分:1)

创建光标后,获取要读取的列的索引。例如,如果SELECT *返回的列之一是price,则以下给出每个游标行中该列的位置:

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中的单个列。

答案 2 :(得分:0)

为您的产品创建一个类

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

然后在你的数据库中运行查询(我假设你有列cat,subcat,item,price) 根据你的标准说items =“lamb”

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

在代码中获得此列表后,您可以轻松地进行所需的任何计算。