将当前值与最后一个值sqlite进行比较以显示在listview中

时间:2016-01-08 11:27:26

标签: android sqlite

我在sqlite中有一个表,其中记录了重量。 现在我想比较输入的新值是否为<或==或>比最后一个值。 我的问题是我无法将“仅”与最终值进行比较,比较使我在表格中记录了所有记录。 这是我的代码

    private class MyCursorAdapter extends SimpleCursorAdapter {
    public MyCursorAdapter(Context context, int layout, Cursor c,
                           String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);}

    @Override
    public Object getItem(int position) {
        return super.getItem(super.getCount() - position - 1);}

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);

        String query = "SELECT nombre FROM miembros order by nombre DESC limit 1";
        SQLiteDatabase datos;
        datos = getApplicationContext().openOrCreateDatabase("DBMIEMBRO", Context.MODE_PRIVATE, null);
        Cursor c = datos.rawQuery(query, null);

        int previous_day=0;
        if (c != null && c.moveToFirst()) {
            previous_day= (int) c.getLong(0)-1;
        }

        int present_day=(int) cursor.getLong(cursor.getColumnIndex(DBhelper.MIEMBRO_NOMBRE));

        if (present_day > previous_day){
            view.setBackgroundColor(Color.parseColor("#F0A1A1"));}//red
        if (present_day < previous_day){
            view.setBackgroundColor(Color.parseColor("#AAF0A1"));}//green
        if (present_day == previous_day){
            view.setBackgroundColor(Color.parseColor("#18DBDB"));}//blue

有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:0)

现在不能在这里写一些代码,但这是我实现它的想法:

我会向数据库和附加列添加一个触发器,例如,less - 1,equal - 2,more - 3.每个新的条目触发器都会根据just之间的比较结果为此条目添加一个标志添加和以前的重量值。在您的代码中,您需要的只是从数据库表中获取标志,并根据它绘制具有相应颜色的视图。

我认为可以使用相同的方法进行行更新。

添加了触发器代码:

BEGIN TRANSACTION;

CREATE TABLE weights (_id INTEGER PRIMARY KEY ASC AUTOINCREMENT, weight INTEGER, flag INTEGER);

CREATE TRIGGER less_flag AFTER INSERT ON weights WHEN (SELECT weight FROM weights WHERE _id = last_insert_rowid()) < (SELECT weight FROM weights WHERE _id IN (select MAX(_id) from weights where _id <> last_insert_rowid()))     BEGIN update weights set flag = 0 where _id = last_insert_rowid(); END;

CREATE TRIGGER more_flag AFTER INSERT ON weights WHEN (SELECT weight FROM weights WHERE _id = last_insert_rowid()) > (SELECT weight FROM weights WHERE _id IN (select MAX(_id) from weights where _id <> last_insert_rowid()))     BEGIN update weights set flag = 1 where _id = last_insert_rowid(); END;

COMMIT TRANSACTION;

这里1 - 新值比以前更大。 0 - 更低。空 - 相等