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

在android sqlite中插入查询未按预期工作,android,sqlite,android-sqlite,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 + " TIMESTAM

这是我的创建表查询

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将添加自己的列来标识行。我错了吗?

尝试将
新对象[]
替换为
新字符串[]
并使用

只有在声明为整数主键时,才能获得一个。

“唯一”还不够。

谢谢您的回复。如果我要使用您建议的更新,那么我应该传递什么作为“当前时间戳”,只需将其添加到您的内容值中,您可以告诉我如何传递吗?据我所知,ContentValues对象只允许文本值。我不知道SQLite存储其时间戳的格式(字符串/整数),google it;)。然后将is作为文本值添加到内容值中。问题在于insert而不是update。在评论了更新部分之后,我将其命名为db.addBrand(新品牌(18,“ABCD”);但是它增加了(9 ABCD)你的
品牌
类看起来像什么;字符串名;还有那两个人的盖特,塞特,真的。甚至我也不想创建自动递增列。但上面的列的行为类似于自动递增列。无论我传递给它的品牌ID是什么,它都会被转换成连续的递增数。
db.update(TABLE_BRANDS, values, "WHERE " + KEY_NAME + " = ? ... etc", new String[]{brand.getName(), brand.getId()})