我有read a bit約sqlite
,因爲我需要在我的表中有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
就是這樣產生的:
您是否嘗試刪除「AUTOINCREMENT」? – user3793589
@ user3793589是的,我做了,我得到了相同的錯誤 – jublikon
你可以發佈你的插入查詢代碼嗎? –