程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我正在尝试获取 SQLite 数据库中的列总和大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决我正在尝试获取 SQLite 数据库中的列总和?

开发过程中遇到我正在尝试获取 SQLite 数据库中的列总和的问题如何解决?下面主要结合日常开发的经验,给出你关于我正在尝试获取 SQLite 数据库中的列总和的解决方法建议,希望对你解决我正在尝试获取 SQLite 数据库中的列总和有所启发或帮助;

我想获得列价格的总和,但总价格显示为 -2

//Dbhandler
 public @R_874_10930@or get@R_485_10586@lp()
{
    sqliteDatabase database = this.getReadableDatabase();
    @R_874_10930@or @R_874_10930@or =database.rawquery("SELEct sum(@R_485_10586@lpricE) as @R_485_10586@l from " + table_Users + ";",null);
   Log.d(tag,"get@R_485_10586@lp: "+@R_874_10930@or.getCount());
    return @R_874_10930@or;
}
//showallSALEitemActivity
 @R_874_10930@or @R_874_10930@or = db.get@R_485_10586@lp();
    int m=0;
       /* while (@R_874_10930@or.movetoNext()) {
            m += @R_874_10930@or.geTint(@R_874_10930@or.getcolumnIndex("@R_485_10586@lprice"));
        }*/
    for(int k = 0; k<=@R_874_10930@or.getCount();k++) {
        m += (int) Integer.parseInt(String.valueOf(@R_874_10930@or.getcolumnIndex("@R_485_10586@lprice")));
    }
    int i=m;
        tp.setText("" + m);

database table image

解决方法

返回查询中总和的列不是 @R_485_10586@lprice
您将其别名为 @R_485_10586@l
要获得它,请使用:

@R_874_10930@or @R_874_10930@or = db.get@R_485_10586@lp();
@R_874_10930@or.moveToFirst()
int m = @R_874_10930@or.geTint(@R_874_10930@or.getcolumnIndex("@R_485_10586@l"));

或者,因为查询只返回 1 列:

int m = @R_874_10930@or.geTint(0);

您不需要 for 循环,它在您的代码中添加了两次 -1 并返-2 因为 @R_874_10930@or.getcolumnIndex("@R_485_10586@lprice") 返回 -1(因为列不存在)。

,

您的主要问题是游标中的列名与传递给 getcolumnIndex 方法的列名不匹配。

其次你想要的值存储在 @R_874_10930@or 的列中,它不是 @R_874_10930@or 中列的索引的值。由于它是第一列也是唯一一列,因此索引将为 0 而不是 @R_485_10586@lprice 列的总和。相反,您需要使用 @R_874_10930@or get???? 方法之一根据列的索引获取存储在列中的值,在这种情况下,您要使用 geTintgetString (如果您想使用该值进行计算,则 geTint 表示您不必从 String 执行 parseInt,如果您只想显示该值,则可以使用 getString.

  • 我个人更喜欢使用更适合所检索值类型的 get 方法来获取值。因此,因为它是一个整数值,所以即使它被用作字符串,我也使用了 geTint

我建议使用以下 2 段代码:-

// DBHanlder
public int get@R_485_10586@lp() {
    int rv = 0;
    String @R_485_10586@l_column = "@R_485_10586@l_price";
    sqliteDatabase database = this.getReadableDatabase();
    @R_874_10930@or @R_874_10930@or =database.rawQuery("SELEct sum(@R_485_10586@lpricE) as " + @R_485_10586@l_column  + " from " + TABLE_Users + ";",null);
    Log.d(tag,"get@R_485_10586@lp: "+@R_874_10930@or.getCount());
    if (@R_874_10930@or.moveToFirst()) {
        rv = @R_874_10930@or.geTint(@R_874_10930@or.getcolumnIndex(@R_485_10586@l_column));
    }
    @R_874_10930@or.close();
    return rv;
}
  • 通过为列名别名使用变量减少了出错的机会。
  • @R_874_10930@or @H_505_5@moveToFirst 方法将移动到 @R_874_10930@or 的第一行。
    • 当从创建游标的 sqliteDatabase 方法返回游标时,游标位于第一行之前的位置,因此需要移动。
    • 如果无法移动,则所有 @R_874_10930@or @H_505_5@move???? 方法都返回 false。
  • 完成后,应始终关闭游标。不这样做会导致错误的根本原因(例如文件句柄耗尽)难以确定。

第二个片段:-

//showallSALEitemActivity
tp.setText(Integer.toString(get@R_485_10586@lp()));

注意

代替使用

@R_874_10930@or.geTint(@R_874_10930@or.getcolumnIndex(@R_485_10586@l_column))

因为你只返回一个你可以使用的值

@R_874_10930@or.geTint(0)

那么列名就无关紧要(如果对 SQL 有效)。我个人更喜欢不使用硬编码索引,除非必要或过于复杂而不使用它们。

大佬总结

以上是大佬教程为你收集整理的我正在尝试获取 SQLite 数据库中的列总和全部内容,希望文章能够帮你解决我正在尝试获取 SQLite 数据库中的列总和所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: