56 votes

Auto-incrémentation SQLite - Comment insérer des valeurs ?

Je génère une table SQLite (en java) :

 create table participants (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, col1,col2);

ensuite, j'essaie d'ajouter des lignes à l'aide de la commande INSERT :

 insert into participants values ("bla","blub");

j'obtiens l'erreur :

 java.sql.SQLException: table participants has 3 columns but 2 values were supplied

Je pensais que l'identifiant de ligne serait généré automatiquement, mais il semble que je manque quelque chose.


J'ai essayé une autre solution :

 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();

en conséquence, j'ai reçu une exception de pointeur nul à "prep.setInt(1,n);"

Voyez-vous la faute?

66voto

seth Points 1331

Avez-vous essayé d'indiquer à quels champs de la table les paramètres que vous transmettez sont censés être liés ?

 INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

Dans votre cas, peut-être quelque chose comme :

 INSERT INTO participants(col1, col2) VALUES ("bla","blub");

27voto

Le moyen le plus simple sans utiliser les noms de colonnes sera d' utiliser null à la place de l' auto -incrémentation est comme ceci

 insert into table values (null, col1, col2)

si vous avez déjà défini la première colonne comme auto-incrémentation, cela fonctionnera correctement.

9voto

Anthea Points 734

trouvé une solution de travail ici :

 PreparedStatement prep = conn.prepareStatement("insert into participants values ($next_id,?,?);");
prep.setString(2, "bla");
prep.setString(3, "blub");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X