这是我的创建表查询。
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将添加一个自己的列来标识行。我错了吗?
答案 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还不够。