SQLite
 sql >> Base de données >  >> RDS >> SQLite

Incompatibilité de type de données (code 20) lors de l'insertion

Je pense que votre problème concerne l'ordre des colonnes et, surtout, la restriction qu'un alias pour la colonne rowid, dans votre cas, l'Id colonne (Id INTEGER PRIMARY KEY AUTOINCREMENT définit l'identifiant comme alias de la colonne rowid ).

  • Notez que les autres colonnes peuvent stocker n'importe quelle valeur selon :-
    • Toute colonne d'une base de données SQLite version 3, à l'exception d'une colonne INTEGER PRIMARYKEY, peut être utilisée pour stocker une valeur de n'importe quelle classe de stockage.

    • Types de données dans SQLite version 3

Une telle colonne ne peut stocker qu'une valeur entière. String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)"; équivaut à insérer des valeurs selon :-

  • NULL dans le nom colonne
  • nom, tel qu'il est passé, en lat colonne
  • lat, comme passé, dans le lon colonne
  • lon, comme passé, dans l'image colonne
  • image, telle que transmise, dans la colonne Id (au revoir[] ne peut pas être stocké dans la colonne ID)

Vous pouvez résoudre ce problème en fournissant les noms de colonne ou en réorganisant les colonnes pour qu'elles correspondent à l'ordre dans lequel elles ont été définies (la première étant sans doute la meilleure pratique).

En tant que tel, l'un des éléments suivants devrait résoudre le problème :-

String sql = "INSERT INTO PHOTO (Id, name, lat, lon, image) VALUES(NULL,?,?,?,?)";

ou :-

String sql = "INSERT INTO PHOTO VALUES(?,?,?,?,NULL)";