我试图搜索这个,但也许我正在寻找它。
这适用于Android应用。 基本上,我想根据一些标准(例如子类别和项目名称)搜索数据库,然后使用行中的一些其他数据值进行计算(例如,获取价格值,并将其用于计算)< / p>
我认为它就像这个查询..
Cursor d = db.rawQuery("SELECT * FROM prices WHERE subcat = 'meat' AND item = 'lamb' ")
现在我需要检索一个列(比如价格)并使用这些值来计算平均价格之类的东西。我该怎么做? (假设步骤1是正确的)......
答案 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;
}
在代码中获得此列表后,您可以轻松地进行所需的任何计算。