2016-03-09 65 views
-1

這是我創建的表查詢。插入查詢不能按預期在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和name,像這樣。

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

問題是addBrand()沒有添加brand_id,我正在通過。它增加了一個連續的值(1,2 3 4)而不是那個?

這是爲什麼?如何解決這個問題?

根據我的理解,如果我沒有一個主鍵的列,sqlite會自己添加一列來標識行。我錯了嗎?

+0

你的品牌類是什麼樣的? – laalto

+0

int id;字符串名稱;以及那兩個吸氣者,二傳手。 –

回答

1

嘗試new String[]更換new Object[]和使用update

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

感謝您的回覆。如果我將使用更新您建議然後我應該通過什麼「CURRENT_TIMESTAMP」 –

+0

只需將它添加到您的內容值 –

+0

你能告訴我如何?據我所知ContentValues對象只允許文字值。 –

0

你只有當它被聲明爲INTEGER PRIMARY KEY的autoincrementing column
UNIQUE並不足夠。

+0

是的。甚至我不想創建自動遞增列。但是,上面的列表現像自動遞增列。無論我傳遞給它的品牌ID如何,它都會轉換爲連續增量編號。 –