java.sql.SQLException: Tabellenteilnehmer hat 3 Spalten, aber es wurden 2 Werte angegeben
ich dachte ROWID würden automatisch generiert. 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();
Ich habe eine Nullzeiger-Ausnahme bei erhalten 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");
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 Spalten in der Tabelle vorhanden sind, 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);
Kai – Kazuya Ito
Sie erstellen zum Beispiel Tabelle “Person”. mit “Ich würde” mit AUTOINKREMENT und “Name” Wie nachfolgend dargestellt:
CREATE TABLE person ( -- Here
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT
);
Dann einstellen NULL zu “Ich würde” von AUTOINKREMENT Wie nachfolgend dargestellt. *Sie können festlegen NULL zu “Ich würde” was hat NICHT NULL Weil “Ich würde” hat INTEGER PRIMÄRSCHLÜSSEL:
INSERT INTO person VALUES (NULL, "John"), (NULL, "Tom");
Jetzt können Sie Zeilen wie unten gezeigt einfügen:
sqlite> SELECT * FROM person;
┌────┬──────┐
│ id │ name │
├────┼──────┤
│ 1 │ John │
│ 2 │ Tom │
└────┴──────┘
14311900cookie-checkROWID INTEGER PRIMARY KEY AUTOINCREMENT – Wie fügt man Werte ein?yes