2015-08-20 50 views
0

我創造了這個表例外插入的SQLite的Android

"CREATE TABLE IF NOT EXISTS Inscripcion (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    hash TEXT, 
    codigo_evento TEXT, 
    ticket TEXT, 
    nombre TEXT, 
    inscripcion_id TEXT, 
    validado int, 
    sincronizado int, 
    numero TEXT, 
    asiento TEXT, 
    adicionales TEXT, 
    otros TEXT , 
    categoria TEXT, 
    codigo_usuario TEXT, 
    rut TEXT, 
    talla TEXT, 
    fecha_validacion TEXT, 
    nombre_responsable TEXT 
)"; 

我是從我的Web服務數據越來越插入到我的數據庫,並把它做好:

String sql = "INSERT INTO 'Inscripcion' VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"; 
SQLiteStatement statement = db.compileStatement(sql); 
db.beginTransaction(); 
for (int p = 0; p < array.length(); p++) { 
    statement.clearBindings(); 
    statement.bindString(1, rowParticipante.getString("hash")); 
    statement.bindString(2, rowParticipante.getString("codigo_evento")); 
    statement.bindString(3, rowParticipante.getString("ticket")); 
    statement.bindString(4, rowParticipante.getString("nombre")); 
    statement.bindString(5, rowParticipante.getString("inscripcion_id")); 
    statement.bindString(6, rowParticipante.getString("validado")); 
    statement.bindString(7, "0"); 
    statement.bindString(8, rowParticipante.getString("numero")); 
    statement.bindString(9, rowParticipante.getString("categoria")); 
    statement.bindString(10, rowParticipante.getString("asiento")); 
    statement.bindString(11, rowParticipante.getString("otros")); 
    statement.bindString(12, rowParticipante.getString("adicionales")); 
    statement.bindString(13, codigoUser); 
    statement.bindString(14, rowParticipante.getString("rut")); 
    statement.bindString(15, rowParticipante.getString("talla")); 
    statement.bindString(16, rowParticipante.getString("fecha_validacion")); 
    statement.bindString(17, rowParticipante.getString("nombre_responsable")); 
    statement.execute(); 
} 
db.setTransactionSuccessful(); 
db.endTransaction(); 

我想這是好的,但我收到以下錯誤:

08-20 11:45:58.645: E/SQLiteLog(20145): (1) table Inscripcion has 18 columns but 17 values were supplied 

我知道它有18個字段,但我必須只添加17個,因爲第一個ID是自動遞增。如何解決這個錯誤?

回答

2

在SQL INSERT中,如果您未指定要將值插入哪些字段,則必須提供ALL的值。

例如在一個簡單的表格與字段(a,b,c)

INSERT INTO yourtable VALUES ('x', 'y', 'z'); // OK 
INSERT INTO yourtable VALUES ('x', 'y'); // NOT ok 

爲不正常的版本,怎麼是DB知道你想要這些值進入哪些領域?也許是a=>x, c=>y,或c=>x, b=>y

您的查詢應該是

INSERT ... (field1, field2,... field17) VALUES (value1, value2, ... value17) 
+0

那麼我怎麼能在這種情況下添加ID? – NHTorres

+0

一般來說你沒有。你讓數據庫爲你指定一個,並在插入完成後檢索它。 –

+0

@sioesi。沒有。正如馬克所示,你從字段#1開始(你的'id'將被列爲字段#0) –

-1

嘗試的第一個值插入空。 ID將自動增加,其他17個值將寫入表中。 18共計

+0

您不必爲自動增量ID插入任何值。 @MarcB已經給出瞭解決方案,即提供INSERT命令的完整語法**,包括字段名稱。 –

+0

你的答案只是**錯**。 –

+0

完整的語法查詢將會很大並且不方便,因爲有18列要插入+ 18個值。你可以通過在ID列中插入NULL來避免它。它會正常工作。我不知道這種方法有什麼問題嗎? – Anton