Danach versuche ich, Zeilen mit dem Befehl INSERT hinzuzufügen:
insert into participants values ("bla","blub");
Ich bekomme den Fehler:
java.sql.SQLException: table participants has 3 columns but 2 values were supplied
Ich dachte, die Zeilen-ID würde automatisch generiert, aber es scheint, dass ich etwas vermisse.
Ich habe eine andere Lösung versucht:
PreparedStatement prep = conn.prepareStatement("insert into participants values (?,?,?);");
Integer n = null;
prep.setInt(1,n);
prep.setString(2, "bla");
prep.setString(3, "blub");
prep.addBatch();
prep.executeBatch();
Als Ergebnis erhielt ich eine Nullzeiger-Ausnahme bei “prep.setInt(1,n);”
Siehst du den Fehler?
Haben Sie versucht anzugeben, auf welche Felder der Tabelle sich die übergebenen Parameter beziehen sollen?
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
In Ihrem Fall vielleicht so etwas wie:
INSERT INTO participants(col1, col2) VALUES ("bla","blub");
Ich denke, das würde funktionieren, ich habe einen anderen guten Weg gefunden und die Frage bearbeitet! Vielen Dank !
– Anthea
24. November 2011 um 0:19 Uhr
Dies ist der richtige Weg. Dies ist auch nicht spezifisch für SQLite.
– Corey Ogburn
28. August 2015 um 14:59 Uhr
Wenn Sie eine Schemamigration durchführen und eine Select-Anweisung für Ihre Einfügung verwenden, können Sie dies tun insert into participants(col1, col2) select col1, col2 from t1_backup;
– mlissner
25. September 2015 um 17:56 Uhr
Padhu
Der einfachste Weg, ohne Spaltennamen zu verwenden, wird sein mit null anstelle von automatische Erhöhung ich mag das
insert into table values (null, col1, col2)
Wenn Sie die erste Spalte bereits als Autoinkrement festgelegt haben, funktioniert es einwandfrei.
Der Grund für Ihren Fehler ist, dass SQL-Einfügungen erwarten, dass Sie die gleiche Anzahl von Werten bereitstellen, wie es Spalten in der Tabelle gibt, wenn kein Spaltenbezeichner verwendet wird.
dh wenn Sie eine SQL-Abfrage wie folgt schreiben:
INSERT INTO TableName VALUES(a1,a2, ...)
.. die Werte müssen genau in der gleichen Reihenfolge wie in der Tabellendefinition stehen (und auch in der gleichen Menge). Der Grund dafür ist, Mehrdeutigkeiten zu vermeiden und die Anzahl von Fehlern zu reduzieren.
In Ihrem Fall haben Sie eine Auto-Increment-Spalte, für die Sie keinen Wert angeben möchten. Das ist natürlich möglich, aber nach den obigen Regeln müssen Sie Spaltennamen angeben:
INSERT INTO TableName (columnName1, columnName2) VALUES(Value1, Value2);
10544200cookie-checkSQLite autoincrement – Wie fügt man Werte ein?yes