在android sqlite中插入查询不能按预期工作

时间:2016-03-09 09:35:07

标签: android sqlite android-sqlite

这是我的创建表查询。

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_BRANDS + "("
    + KEY_ID + " INTEGER UNIQUE,"
    + KEY_NAME + " TEXT UNIQUE,"
    + KEY_CREATED_AT + " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,"
    + KEY_UPDATED_AT + " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP" + ")";

db.execSQL(CREATE_CONTACTS_TABLE);

这是更新/添加新品牌的功能。

void addBrand(Brand brand) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_ID, brand.getId()); // Contact Name
    values.put(KEY_NAME, brand.getName()); // Contact Name


    db.execSQL("UPDATE " + TABLE_BRANDS +
                    " SET " + KEY_NAME + " = ?, " +
                    KEY_UPDATED_AT + " = CURRENT_TIMESTAMP" +
                    " WHERE " + KEY_ID + " = ?",
            new Object[]{brand.getName(), brand.getId()});


    db.insertWithOnConflict(TABLE_BRANDS, null, values, SQLiteDatabase.CONFLICT_IGNORE);        
    db.close(); // Closing database connection
}

在调用时我明确地传递id和名称。

db.addBrand(new Brand(17, "sdddddsfsfdsfdshfjdh"));

问题是addBrand()没有添加brand_id,我正在传递。它正在添加一个顺序值(1,2 3 4)而不是那个??

为什么会出现这种情况?如何解决?

根据我的理解,如果我没有主键的列sqlite将添加一个自己的列来标识行。我错了吗?

2 个答案:

答案 0 :(得分:1)

尝试使用new Object[]替换new String[]并使用update

db.update(TABLE_BRANDS, values, "WHERE " + KEY_NAME + " = ? ... etc", new String[]{brand.getName(), brand.getId()})

答案 1 :(得分:0)

只有当它被声明为INTEGER PRIMARY KEY时才会得到autoincrementing column UNIQUE还不够。