Android 从表SQLite中检索多个特定列的数据

Android 从表SQLite中检索多个特定列的数据,android,sqlite,multiple-columns,database-cursor,Android,Sqlite,Multiple Columns,Database Cursor,我试图在SQLite中从一个表的多个特定列检索数据,但使用下面的代码,我不知道为什么,但它不是从两个不同的列获取数据,而是从我放入方法的第一列获取数据,即“支出”表的“预算”列:- 使用上面的代码,我的“amountfromdb_budget”和“amountfromdb_FoodDrinks”都将与我的SQLite的“budget”列中的值一起插入。我的目标是将“预算”列中的值检索到“amountfromdb_budget”中,将“FoodDrinks”列中的值检索到“amountfromdb

我试图在SQLite中从一个表的多个特定列检索数据,但使用下面的代码,我不知道为什么,但它不是从两个不同的列获取数据,而是从我放入方法的第一列获取数据,即“支出”表的“预算”列:-

使用上面的代码,我的“amountfromdb_budget”和“amountfromdb_FoodDrinks”都将与我的SQLite的“budget”列中的值一起插入。我的目标是将“预算”列中的值检索到“amountfromdb_budget”中,将“FoodDrinks”列中的值检索到“amountfromdb_FoodDrinks”

下面是我的DatabaseHelper类中的“getLatestAmount”方法:-

    public Cursor getLatestAmount(String id, String category) {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor latestamount = db.rawQuery("SELECT "+category+" FROM spendings WHERE id =" +id , null);
        return latestamount;
    }
我的“支出”表的结构如下:-

    private static final String SPENDING_TABLE = "spendings";
    private static final String ID_SPENDING = "id";
    private static final String BUDGET = "budget";
    private static final String TOTAL_EXPENSES = "total_expenses";
    private static final String FOODNDRINKS = "foodndrinks";
    private static final String TRAVEL = "travel";
    private static final String SHOPPING = "shopping";
    private static final String ENTERTAINMENT = "entertainment";
    private static final String OTHERS = "others";
    private static final String BALANCE = "balance";

从获取食物和饮料的数量时起,您没有覆盖光标。因此,您仍在使用预算光标。因此,将结果从
getLatestAmount
保存到
latestamount

改变

myDb.getLatestAmount(id, temp_category);

latestamount = myDb.getLatestAmount(id, temp_category);

因此您的代码应该如下所示


如果我理解正确的话。它两次获取预算列数据是的,它两次获取预算列数据,但我想获取预算列数据并将其放入“amountfromdb\u budget”中,第二次调用“myDb.getLatestAmount(id,temp\u category)”时,我已将“temp\u category”更改为“FoodDrinks”,以获取“FoodDrinks”中的金额列,并将该值插入“amountfromdb_FoodNumbers”但是不知道如何或正确的方法如何覆盖光标,以便在获取预算后获得食物和饮料的数量?您需要将方法的结果保存到变量latestamount我如何覆盖光标,以便在获取预算后获得食物和饮料的数量?您调用该方法并保存result到变量
latestamount
。正如我上面所示。因此,在获得预算后。对于食品饮料,我使用这个变量?“amountfromdb\u foodrinks=myDb.getLatestAmount(id,temp\u category);”?否。您可以看到下面的行
myDb.getLatestAmount(id,temp\u category)
在这里将其更改为此行
latestamount=myDb.getLatestAmount(id,temp_category);
然后您的问题就解决了。更改该行,使其等于
latestamount
,您可以将其他内容与您在问题中发布的内容保持一致
latestamount = myDb.getLatestAmount(id, temp_category);
String temp_category = "budget";
Cursor latestamount = myDb.getLatestAmount(id, temp_category); 
if (latestamount.getCount() == 0) { 
    Toast.makeText(AddExpenses.this, "No amount found !", Toast.LENGTH_LONG).show(); 
} else {
    latestamount.moveToFirst();
    amountfromdb_budget = latestamount.getDouble(0);
} 

temp_category = "foodndrinks";
// the line below is what you needed to change
latestamount = myDb.getLatestAmount(id, temp_category); 
if (latestamount.getCount() == 0) { 
    Toast.makeText(AddExpenses.this, "No amount found !", Toast.LENGTH_LONG).show(); 
} else { 
    latestamount.moveToFirst();
    amountfromdb_foodndrinks = latestamount.getDouble(0);
}