如何在SQLite中总结我的列值?

时间:2016-06-19 00:26:35

标签: java android sql sqlite listview

我知道这个问题已被多次询问,但我无法为我的问题找到正确的语法。

我想总结一下“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);}

}

2 个答案:

答案 0 :(得分:0)

我希望此代码可以帮助您。

你的SQL查询应该是

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

答案 1 :(得分:0)

在您的SqlDbHelper类中:

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

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