2016-07-05 110 views
0

我有read a bitsqlite,因爲我需要在我的表中有autoincrement primary key列的能力。SQlite主鍵:數據類型不匹配

他們提供的信息:

如果聲明表的列是INTEGER PRIMARY KEY,那麼 當你插入一個NULL值插入到表中的該列中,NULL是 自動轉換成一個整數,該整數大於表中所有其他行的該列的最大值的一個整數,如果 表爲空,則爲1。

我試圖插入NULL到主鍵列,並得到了以下問題:

[INSERT INTO maschinen(name,id_maschine,description,id_maschine_local_row) VALUES (?,?,?,?)] datatype mismatch 
E/SQLiteDatabase: Error inserting name=FLATTENER No. 1 id_maschine=6 description=Flattener the BIG one id_maschine_local_row=NULL 

我創建語句:

CREATE TABLE maschinen(id_maschine_local_row INTEGER PRIMARY KEY AUTOINCREMENT, id_maschine INTEGER, name STRING, description STRING) 

我在做什麼錯?

如果我插入一行沒有不把一些數據插入語句VOR id_maschine_local_row它始終爲0。

數據庫處理器:

public class DatabaseHandler extends SQLiteOpenHelper { 

    // Machines 
    private static final String TABLE_MASCHINEN = "maschinen"; 

    private static final String KEY_MASCHINE_LOCAL_ROW_ID = "id_maschine_local_row"; 
    private static final String KEY_MASCHINE_ID = "id_maschine"; 
    private static final String KEY_MASCHINE_NAME = "name"; 
    private static final String KEY_MASCHINE_DESCRIPTION = "description"; 

    private String CREATE_MASCHINEN_TABLE = "CREATE TABLE " + TABLE_MASCHINEN + "(" + KEY_MASCHINE_LOCAL_ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_MASCHINE_ID + " INTEGER, "+ KEY_MASCHINE_NAME + " STRING, " + KEY_MASCHINE_DESCRIPTION + " STRING)" ; 

    (...) 
    public long addMaschine(Maschine mMaschine) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     // machine data 
     ContentValues valuesMachine = new ContentValues(); 
     valuesMachine.put(KEY_MASCHINE_LOCAL_ROW_ID, "NULL"); /* Without that line for each machine the local row id is 0. With that line as suggested in the article I get the issue */ 
     valuesMachine.put(KEY_MASCHINE_ID, mMaschine.getId()); 
     valuesMachine.put(KEY_MASCHINE_NAME, mMaschine.getName()); 
     valuesMachine.put(KEY_MASCHINE_DESCRIPTION, mMaschine.getDescription()); 

     //characteristics data 
     List<Characteristic> characteristicList = new ArrayList<Characteristic>(); 
     characteristicList.addAll(mMaschine.getCharacteristics()); 

     for(int i = 0; i < mMaschine.getCharacteristics().size(); i++){ 
      ContentValues valuesCharacteristics = new ContentValues(); 

      //valuesCharacteristics.put(KEY_CHARACTERISTIC_LOCAL_ROW_ID, "NULL"); 
      valuesCharacteristics.put(KEY_CHARACTERISTIC_ID, characteristicList.get(i).getCharacteristic_id()); 
      valuesCharacteristics.put(KEY_CHARACTERISTIC_ID_MASCHINE, characteristicList.get(i).getId_maschine()); 
      valuesCharacteristics.put(KEY_CHARACTERISTIC_NAME, characteristicList.get(i).getName()); 
      valuesCharacteristics.put(KEY_CHARACTERISTIC_DESCRIPTION, characteristicList.get(i).getDescription()); 
      valuesCharacteristics.put(KEY_CHARACTERISTIC_TYPE, characteristicList.get(i).getType()); 
      valuesCharacteristics.put(KEY_CHARACTERISTIC_VALUE, characteristicList.get(i).getValue()); 
      valuesCharacteristics.put(KEY_CHARACTERISTIC_IS_CHANGED, characteristicList.get(i).getIsChanged()); 

      db.insert(TABLE_CHARACTERISTICS, null, valuesCharacteristics); 
     } 

     long machine_id = db.insert(TABLE_MASCHINEN, null, valuesMachine); 

     db.close(); 

     return machine_id; 
    } 
} 

編輯: 插入null就是這樣產生的:

enter image description here

+0

您是否嘗試刪除「AUTOINCREMENT」? – user3793589

+0

@ user3793589是的,我做了,我得到了相同的錯誤 – jublikon

+0

你可以發佈你的插入查詢代碼嗎? –

回答

2

AUTOINCREMENT已存檔未插入值sys TEM自動輸入

INSERT INTO maschinen(name,id_maschine,description,id_maschine_local_row) VALUES (?,?,?,?) 

- > INSERT INTO MASCHINEN(名稱,id_maschine,描述)VALUES

(,,???) - 創建表的申請序列>輸入序列等於

INSERT INTO maschinen(id_maschine,name,description) VALUES (?,?,?) 
+0

但隨後場id_machine_local_row保持爲0,直到永遠排 – jublikon

+0

輸入序列創建表申請序列等於 INSERT INTO MASCHINEN(id_maschine,名稱,描述)VALUES(?,?,?) – loadjang

+0

@jublikon,根據您所提供的答案在這裏,你的表可能有問題,因爲通常情況下,如果'id_maschine_local_row'是主鍵列,它不能有多個'0'值。我會建議你卸載應用程序並重新安裝它 – user3793589