【问题标题】:How to sum my column value in SQLite?如何在 SQLite 中对我的列值求和?
【发布时间】:2016-10-20 13:07:31
【问题描述】:

我知道这个问题已经被问过好几次了,但我就是无法为我的问题找到正确的语法。

我想总结一下“einnahmen”的价值。

这是我的 SqlDbHelper 类:

public class SqlDbHelper extends SQLiteOpenHelper {

    public static final String DATABASE_TABLE = "PHONE_CONTACTS";
    public static final String COLUMN1 = "nr";
    public static final String COLUMN2 = "name";
    public static final String COLUMN3 = "einnahmen";
    public static final String COLUMN4 = "ausgaben";
    public static final String COLUMN5 = "datum";

    private static final String SCRIPT_CREATE_DATABASE =
            "create table "+ DATABASE_TABLE
                    + " (" + COLUMN1+ " integer primary key autoincrement, "
                    + COLUMN2+ " text not null, "
                    + COLUMN3 + " text not null, "
                    + COLUMN4 + " text not null, "
                    + COLUMN5 + " text not null);";

    public SqlDbHelper(Context context, String name, CursorFactory factory,
                       int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL(SCRIPT_CREATE_DATABASE);


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }
}

这是我的MainActivity

public class BookActivity extends Activity {

    SqlHandler sqlHandler;

    ListView lvCustomList;
    EditText etName, etEinnahmen, etAusgaben, etDatum;
    ImageButton btn_add;
    TextView gesamteinnahmen;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_book);

        gesamteinnahmen = (TextView) findViewById(R.id.tVgesamtEinnahmen);
        lvCustomList = (ListView) findViewById(R.id.lv_custom_list);
        etName = (EditText) findViewById(R.id.et_name);
        etEinnahmen = (EditText) findViewById(R.id.et_einnahmen);
        etAusgaben = (EditText) findViewById(R.id.et_ausgaben);
        etDatum = (EditText) findViewById(R.id.et_datum);
        btn_add = (ImageButton) findViewById(R.id.btn_add);
        sqlHandler = new SqlHandler(this);

        showList();

        btn_add.setOnClickListener(new OnClickListener() {

            @SuppressLint("ShowToast")
            @Override
            public void onClick(View v) {

                String name = etName.getText().toString();
                String einnahmen = etEinnahmen.getText().toString();
                String ausgaben = etAusgaben.getText().toString();
                String datum = etDatum.getText().toString();

                if (TextUtils.isEmpty(name)) {etName.setError("Das Feld ist leer");return;}
                    else if (TextUtils.isEmpty(einnahmen)) {etEinnahmen.setError("Das Feld ist leer");return;
                }   else if (TextUtils.isEmpty(ausgaben)) {etAusgaben.setError("Das Feld ist leer");return;
                }   else if (TextUtils.isEmpty(datum)) {etDatum.setError("Das Feld ist leer");return;
                }   else {

                    Toast.makeText(BookActivity.this,"Daten wurden erfolgreich gespeichert", Toast.LENGTH_SHORT).show();

                    String query = "INSERT INTO PHONE_CONTACTS(name,einnahmen,ausgaben,datum) values " +
                            "('" + name + "','" + einnahmen  +"','" + ausgaben + "','" + datum + "')";
                    sqlHandler.executeQuery(query);

                    showList();

                    etName.setText("");
                    etEinnahmen.setText("");
                    etAusgaben.setText("");
                    etDatum.setText("");

                }
            }
        });

    }

    private void showList() {

        ArrayList contactList = new ArrayList();
        contactList.clear();
        String query = "SELECT * FROM PHONE_CONTACTS";

        Cursor c1 = sqlHandler.selectQuery(query);
        if (c1 != null && c1.getCount() != 0) {
            if (c1.moveToFirst()) {
                do {
                    ContactListItems contactListItems = new ContactListItems();

                    contactListItems.setNr(c1.getString(c1.getColumnIndex("nr")));
                    contactListItems.setName(c1.getString(c1.getColumnIndex("name")));
                    contactListItems.setEinnahmen(c1.getString(c1.getColumnIndex("einnahmen")));
                    contactListItems.setAusgaben(c1.getString(c1.getColumnIndex("ausgaben")));
                    contactListItems.setDatum(c1.getString(c1.getColumnIndex("datum")));

                    contactList.add(contactListItems);


                } while (c1.moveToNext());
            }
        }
        c1.close();

        ContactListAdapter contactListAdapter = new ContactListAdapter(
                BookActivity.this, contactList);
        lvCustomList.setAdapter(contactListAdapter);}

}

【问题讨论】:

  • einnahmen 被声明为 text 列。通常你会对integerreal(浮点)列求和。这是正确的吗?

标签: java android sql sqlite listview


【解决方案1】:

我希望这段代码对您有所帮助。

你的 sql 查询应该是这样的

query = "SELECT *, SUM(einnahmen) as sum FROM PHONE_CONTACS";

【讨论】:

  • sry 我是一个完全的新手。我在哪里插入这个?
  • 将 String query = "SELECT * FROM PHONE_CONTACTS" 替换为 String query = "SELECT *, SUM(einnahmen) as sum FROM PHONE_CONTACS";
  • contactListItems.setEinnahmen(c1.getString(c1.getColumnIndex("sum")));
【解决方案2】:

在您的 SqlDbHelper 类中:

public long sumEinnahmen() {
    SQLiteStatement statement = getReadableDatabase().compileStatement(
        "select sum(" + COLUMN3 + " from " + DATABASE_TABLE);
    try {
        return statement.simpleQueryForLong();
    } finally {
        statement.close();
    }
}

请注意,您的列当前声明为 text 列,而不是 integerreal 列。如果您只在该列中存储数字数据,则应改为使用这些数字类型中的任何一种来声明它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    相关资源
    最近更新 更多