Sqlite插入返回标识正确,但字段中的值丢失

时间:2016-07-24 17:54:03

标签: android sqlite

我有这个数据库:

private static final String CREATE_TABLE_RISCALA = "CREATE TABLE IF NOT EXISTS " + TABLE_RISCALA
            + "(" + KEY_ID + " INTEGER PRIMARY KEY autoincrement,"
            + KEY_STORE_TIPO + " TEXT not null,"
            + KEY_STORE_NAME + " TEXT not null,"
            + KEY_RISC_TOT + " REAL,"
            + KEY_RISC_ING + " REAL,"
            + KEY_ING + " TEXT,"
            + KEY_FLAG + " INTEGER ,"
            + KEY_1 + " TEXT,"
            + KEY_2 + " TEXT,"
            + KEY_3 + " TEXT,"
            + KEY_4 + " REAL,"
            + KEY_5 + " REAL,"
            + KEY_CREATED_AT + " TEXT" + ")";

并且表格是正确创建的,当我在里面插入数据时我使用了这个函数:

public long insert_row_riscala(String tipo,String nome) {

        long id = 0;
        ContentValues values = new ContentValues();

        values.put(KEY_STORE_TIPO, tipo);
        values.put(KEY_STORE_NAME, nome);
        values.put(KEY_RISC_TOT, "1000");
        values.put(KEY_RISC_ING, "1000");
        values.put(KEY_FLAG, "0");
        values.put(KEY_CREATED_AT, getDateTime());

        // insert row
        synchronized (dbLock) {
            //id = dbWrite.insert(TABLE_RISCALA, null, values);
            //id = dbWrite.insertWithOnConflict(TABLE_RISCALA, null, values, SQLiteDatabase.CONFLICT_REPLACE);
            id = dbWrite.insertOrThrow(TABLE_RISCALA, null, values);
        }
        return id;
    }

如果插入的值不同,则一切正常,例如:

id(由数据库自动增量)

the value in the field KEY_STORE_TIPO is "Sorbetto"
the value in the field KEY_STORE_NAME is "Mora"

当我尝试插入(添加到数据库)新值时,例如:

id(由数据库自动增量)

the value in the field KEY_STORE_TIPO is "Granita"
the value in the field KEY_STORE_NAME is "Mora"

返回id是正确的(> 0)但是当我通过外部程序(DB Browser for SQLite)读取数据库以验证插入数据时,我发现不是第二次INSERT。 没有异常生成! 怎么可能?

编辑已解决

在另一个线程中,我有另一个查询

String selectQuery = "DELETE FROM " + TABLE_RISCALA + " WHERE " + KEY_ID + " NOT IN (SELECT MIN(" + KEY_ID + ") FROM " + TABLE_RISCALA +
                "  GROUP BY " + KEY_STORE_NAME + ")";

但我错过了插入KEY_STORE_TIPO !! 删除重复项的最终查询是:

String selectQuery = "DELETE FROM " + TABLE_RISCALA + " WHERE " + KEY_ID + " NOT IN (SELECT MIN(" + KEY_ID + ") FROM " + TABLE_RISCALA +
                "  GROUP BY " + KEY_STORE_TIPO + "," + KEY_STORE_NAME + ")";

抱歉!

0 个答案:

没有答案