从SQLite列中获取所有数字字符串并进行总和计算

2024-05-13

我是 Android 和 SQLite 的新手。我在 SQLite 中有一个只有数字的“AMOUNT”列,我可以在 ListView 中显示它。但我无法找到任何我理解的方法来将它们全部添加并显示在 TextView 中。

这是数据库助手

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "people.db";
    private static final String TABLE_NAME = "people_table";
    private static final String COL1 = "ID";
    private static final String COL2 = "DATE";
    private static final String COL3 = "DESCRIPTION";
    private static final String COL4 = "AMOUNT";


    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                " DATE TEXT, DESCRIPTION TEXT, AMOUNT TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public boolean addData(String inc_date, String inc_description, String inc_amount){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2, inc_date);
        contentValues.put(COL3, inc_description);
        contentValues.put(COL4, inc_amount);

        long result  = db.insert(TABLE_NAME, null, contentValues);

        return result != -1;
    }

    public Cursor showData(){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
    }

    public boolean updateData(String id, String name, String email, String tvShow){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL1,id);
        contentValues.put(COL2,name);
        contentValues.put(COL3,email);
        contentValues.put(COL4,tvShow);
        db.update(TABLE_NAME, contentValues, "ID = ?", new String[] {id});
        return true;
    }

    public Integer deleteData(String id){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete(TABLE_NAME, "ID = ?", new String[] {id});
    }

}

这是活动

import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;

public class IncPag extends AppCompatActivity {

    DatabaseHelper peopleDB;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inc_pag);
        all_inc_dat();
        amo_sum();
    }

    private void all_inc_dat(){
        TextView inc_data=findViewById(R.id.tex_inc);
        ListView dat_col=findViewById(R.id.dat_col);
        ListView des_col=findViewById(R.id.des_col);
        ListView amo_col=findViewById(R.id.amo_col);
        peopleDB=new DatabaseHelper(this);

        Cursor data = peopleDB.showData();

        if (data.getCount() == 0) {
            inc_data.setText(R.string.no_data_found);
            return;
        }
        ArrayList<String> dat_lis = new ArrayList<>();
        ArrayList<String> des_lis = new ArrayList<>();
        ArrayList<String> amo_lis = new ArrayList<>();

        while (data.moveToNext()) {
            dat_lis.add(data.getString(data.getColumnIndex( "DATE")));
            des_lis.add(data.getString(data.getColumnIndex( "DESCRIPTION")));
            amo_lis.add(data.getString(data.getColumnIndex( "AMOUNT")));

        }

        ListAdapter dat_ada = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dat_lis);
        dat_col.setAdapter(dat_ada);
        ListAdapter des_ada = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, des_lis);
        des_col.setAdapter(des_ada);
        ListAdapter amo_ada = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, amo_lis);
        amo_col.setAdapter(amo_ada);
    }

    private void amo_sum(){
        TextView tv_sum=findViewById(R.id.tv_sum);
        tv_sum.setText(amount total?);
    }
}

如果在数据库助手中计算更容易,那么请向我展示 SQLite 解决方案。或者进入listview后是否更容易进行计算


解决方案第 1 部分

您可以将以下方法添加到数据库助手中

public long getAmountSum(){
    long rv = 0;
    String[] columns = new String[]{"sum(" + COL4 + ")"};
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor csr = db.query(TABLE_NAME,columns,null,null,null,null,null);
    if (csr.moveToFirst()) {
        rv = csr.getLong(0);
    }
    csr.close();
    return rv;
}
  • 请注意,如果 AMOUNT 列中的值不是有效整数,则该行的值将为 0。

  • 这相当于运行查询SELECT sum(AMOUNT) FROM people_table;但使用 SQLiteDatabasequery方便的方法而不是使用rawQuery method.

    • 与使用 rawQuery 方法相反,在可以使用便利方法时使用它们被认为是更好的做法。
    • 人们还认为,更好的做法是对表名和列名使用单一来源,而不是每次使用列名时对其进行硬编码(因此使用COL4而不是"AMOUNT").
    • 尽管使用硬编码的列偏移(例如0在上面),上面是一个例外,其中实际的列名称(即sum(AMOUNT)),因为它是从底层生成的 SQL 派生的,所以对其进行编码可能比对列偏移量进行编码(第一个/唯一的列,因此它始终为 0)更成问题。
  • 如果表中没有行,则返回 0。

解决方案第 2 部分

上述内容可与修订后的内容结合使用amo_sum方法如下:-

private void amo_sum(){
    TextView tv_sum=findViewById(R.id.tv_sum);
    tv_sum.setText(String.valueOf(peopleDB.getAmountSum));
}
  • 请注意,以上是原则代码,尚未经过测试,因此可能包含一些错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从SQLite列中获取所有数字字符串并进行总和计算 的相关文章

  • 使用协程对任务进行排队

    我最近开始阅读有关协程的内容 我想询问某个场景 考虑一个带有一个按钮的简单屏幕 单击后 它会执行一堆打印语句和一些延迟 其间 到目前为止 我正在使用协程来实现这一目标 现在 我的问题是 如果用户反复向该按钮发送垃圾邮件 是否有一种方法可以将
  • 相对重力

    我最近开始使用jMonkey引擎 这非常好 但我在尝试实现相对重力时陷入了困境 我想让行星彼此围绕轨道运行 不一定是完美的圆形轨道 取决于速度 所以每个对象都应该影响其他对象 我现在拥有的 关闭全球重力 bulletAppState get
  • 是否有适用于 Java 的 CalDAV 客户端库? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 CalDAV 协议与我的日
  • 在 Android 模拟器上运行 Google 地图 v2

    我尝试在我的 Android 应用程序中实现 Google 地图 v2 但不幸的是 我收到的不是地图 而是以下消息 是否可以在 Android 模拟器 平台 4 2 上运行这些地图 目前 引用 Google Android Map API
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • Firebase 邀请发送电子邮件,但不发送短信。返回结果代码 0

    我正在尝试使用 Firebase 在我的 Android 应用程序中实现应用程序邀请系统 该代码与他们中给出的完全相同guide https firebase google com docs invites android private
  • Spring Boot 中的服务限流能力

    有什么办法可以实现Spring中其余服务的服务限制能力 特别是Spring boot 这里的期望是 我的服务暴露于外界 目前每秒 分钟的服务调用数量没有限制 我们希望通过设置限制来控制这一点 我有一个替代选项 通过跟踪并发哈希映射或任何缓存
  • ListPreferences 的异常

    这是我的第一个 Android 应用程序 在尝试使用 ListPreference 时遇到了异常 应用程序与首选项一起加载 但是当我触摸 ListPreference 条目时 应用程序 意外停止 设置 java public class S
  • 使用 Google 语音服务查询支持的语言不适用于 Android 13

    我使用以下命令查询语音服务支持的语言RecognizerIntent ACTION GET LANGUAGE DETAILS action val intent Intent RecognizerIntent ACTION GET LANG
  • 从另一个活动返回时 Android ListView 项目没有响应?

    我从 ArrayAdapter 创建一个 ListView ListView的每一行都有一个ImageView和一个TextView 现在我使用 setOnItemClickListener 处理单击事件 lv getListView lv
  • Rails Resque 作业无法访问数据库,I/O 错误

    我遇到错误 无法找到任何相关信息 这是一个 Ruby on Rails 堆栈 Ruby 1 9 Rails 3 2 并使用 sqlite3 数据库进行开发 Resque 和 Redis 用于后台作业 Rails Web 应用程序启动正常 可
  • 如何在flutter app android中添加Startapp广告?

    我想用其他广告更改 AdMob 广告 一些个人问题 如何在flutter app android中添加Startapp广告 有什么方法可以将启动广告添加到我的 flutter 应用程序 android 中 StartApp 现已更名为 St
  • Android动态功能模块,找不到资源

    当下载的功能模块发布到 Play 商店时 我在启动活动时遇到问题 它总是在下载模块活动中的 setContentView 上崩溃 java lang RuntimeException Unable to start activity Com
  • 原子整数的compareandexchange()与compareandset()

    在研究 AtomicInteger 时 我发现这个 API 提供了两种方法 比较和交换 如果当前值被引用 则自动将该值设置为 newValue to 作为见证值 预期值 记忆效应为 由指定VarHandle compareAndExchan
  • CreateProcess error=206,运行 gwtCompile 时文件名或扩展名太长

    我的应用程序是一个 springboot gradle 应用程序 我的应用程序的一部分涉及使用 gradle 进行遗留 gwt 编译 它工作正常 但今天当我运行下面的 gradle 任务时 它显示 CreateProcess error 2
  • getApplicationDocumentsDirectory 在 flutter 桌面(Windows)上不起作用

    如何在 Windows 上的 flutter 桌面上保存和打开文件 getApplicationDocumentsDirectory 不适用于 Windows 应用程序的 flutter 桌面 Future
  • 如何将字符串解析为map

    有一个像A B C D E F这样的字符串 如何将其解析为map 我会使用拆分 String text A B C D E F Map
  • SQLite 导入选项卡文件:.import 是每行执行一次插入还是将它们与事务分组?

    我正在从选项卡文件导入数百万行 而 SQLite import mode 选项卡非常慢 我有三个索引 所以缓慢可能来自索引 但首先我想检查 import 是否添加将大量 所有行分组到单个提交中的行 我无法找到 import 如何工作的文档
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • Spring - 使用存储过程时使用 simplejdbccall 进行批量更新

    我正在使用 spring jdbc 模板 使用存储过程创建记录 public Long create City obj SimpleJdbcCall jdbcCall new SimpleJdbcCall getJdbcTemplate g

随机推荐

  • Jquery Mobile Web:可以调用本机应用程序吗?

    我希望能够触摸移动网页上的链接并让它启动本机移动应用程序 例如 Skype 这似乎是一个巨大的安全问题 但我想知道移动环境是否允许这样做 编辑 是的 有用 对 document window myapp myparam 的 javascri
  • 将 lambda 表达式传递给 lambda 参数 c++11

    我想做这样的事情 int main auto f some variables take lambda function something with lambda function f other variables variables
  • 从模板类创建对象时出错

    我一直在尝试找到一种方法 从 C 中的多元正态分布中采样随机向量 同时具有均值向量和协方差矩阵 就像 Matlab 的那样mvnrnd功能有效 我找到了实现此功能的类的相关代码这一页 http lost found wandering bl
  • Xcode“使用性能工具运行”被禁用?

    我正在尝试从我的 Xcode 项目中查找内存泄漏 我不知道发生了什么 我无法选择任何内容Run gt Run with performance tool 事物列表被禁用 请帮助我 我是初学者 问题是我已经删除了构建文件夹并尝试使用性能工具运
  • Scala 宏的位置怎么了?

    我试图获取宏参数的原始输入字符串 但返回的位置似乎有点偏离 考虑这个宏 例如 object M import scala reflect macros Context import language experimental macros
  • 无法在 python 中导入名称 GoogleMaps

    我使用下面的代码来获取地址的纬度和经度 from googlemaps import GoogleMaps gmaps GoogleMaps api key address Constitution Ave NW 10th St NW Wa
  • ASP.NET MVC4 CustomErrors DefaultRedirect 被忽略

    我有一个 MVC 4 应用程序 使用自定义 HandleErrorAttribute 仅处理自定义异常 我想拦截默认的 404 和其他非 500 错误页面 并用更有吸引力的内容替换它们 为此 我将以下内容添加到我的 Web config 中
  • Chrome 中的 net::ERR_INSECURE_RESPONSE

    从 API 获取一些数据时 我在 Chrome 控制台中收到错误 net ERR INSECURE RESPONSE 此错误通常是由于未签名的证书造成的 但是 这不是问题 因为我有有效且签名的证书 该错误根本不会经常发生 如果我重新启动 C
  • .NET 4.7.1 中的 ASP.NET MVC 5 razor 视图中参考 netstandard 2.0 类型

    NET 4 7 1 应该解决我们在引用时遇到的问题netstandard 2 0完整框架中的库 尽管存在一些持续且令人痛苦的 dll 冲突警告和相关问题 并且需要手动更新到 PackageReferences 看看这个精彩的扩展 https
  • jquery ui 选项卡不再支持 cookie?怎么办?

    我很抱歉这是一个开放式问题 但我很茫然 从 jquery UI 1 9 版本开始 它们使用cookie选项以保存跨多个页面的选项卡的活动状态 http jqueryui com upgrade guide 1 9 deprecated co
  • 我们在哪里/什么时候使用 JSON?

    你能告诉我 JSON 有什么用 在 Javascript 和 PHP 中 当我们需要 JSON 方法时 我从以下链接中阅读 但是 我没有获得有关任何项目的 JSON 实现的任何信息 http www json org js html htt
  • 是否可以从新的 instagram-graph-api 检索关注者列表?

    是否可以从新的 Instagram 图形 API 检索 Instagram 关注者列表 发现 Instagram API 已被弃用 您知道另一种检索 Instagram 关注者的方法吗 不再有 API 可以获取 Instagram 的关注者
  • FOREACH返回的对象顺序稳定吗?

    是否可以安全地假设对同一集合的两次迭代将以相同的顺序返回对象 显然 假设集合没有被更改 这取决于集合类型 对于大多数集合来说 答案是 是 然而 这并不能得到保证 集合类型的文档应该指定它是否这样做 但正如大多数人所做的那样 该细节通常被忽视
  • 无法再转换为 LayerDrawable(升级 v7 后)

    我正在使用支持库的最新版本 22 1 1 我曾经这样去 mRatingBar RatingBar getActivity findViewById R id rating LayerDrawable layer LayerDrawable
  • PHP 论坛软件可以轻松与现有网站集成吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个现有的 php 网站 已经设置了用户系统 注册 身份验证 丢失密码等 我决定添加一个留言板并将其与现有网站集成 在一个网站上注册应
  • 框架可以用什么代替?

    假设我有一个包含 50 个网页的网站 每个页面由 A Header 导航 左侧内容 右侧内容 Footer 不使用 Frames 服务器端编程 第三方工具和软件 构架 我需要将这 5 个部分的代码 HTML 标记 分别放入这 50 个页面中
  • 指向指针的指针与普通指针

    指针的作用是保存特定变量的地址 那么下面代码的内存结构应该是这样的 int a 5 int b a 内存地址 值一个 0x000002 5b 0x000010 0x000002 好的 那么假设现在我要保存指针 b的地址 那么我们一般定义一个
  • Python3 http.server:将日志保存到文件中

    我使用Python3 6编写了一个简单的HTTP服务器来重定向所有请求 我写的文件可以找到here https github com kmahyyg learn py3 blob master antiscanhttp py 我可以在 Ub
  • 防止脚本目录被添加到Python 3中的sys.path

    有没有办法阻止脚本的目录被添加到python3中的sys path 由于导入在 python 中是相对的 因此我遇到了导入冲突 我正在处理的一个遗留项目有一个名为logger py在与内置冲突的脚本的根目录中logger 我使用的自定义构建
  • 从SQLite列中获取所有数字字符串并进行总和计算

    我是 Android 和 SQLite 的新手 我在 SQLite 中有一个只有数字的 AMOUNT 列 我可以在 ListView 中显示它 但我无法找到任何我理解的方法来将它们全部添加并显示在 TextView 中 这是数据库助手 im