SQLite
 sql >> Database >  >> RDS >> SQLite

Tipo di dati non corrispondente (codice 20) durante l'inserimento

Penso che il tuo problema sia con l'ordine delle colonne e, soprattutto, la restrizione che è un alias per la colonna rowid, nel tuo caso l'Id colonna (Id INTEGER PRIMARY KEY AUTOINCREMENT definisce ID come alias della colonna rowid ).

  • Nota che altre colonne possono memorizzare qualsiasi valore come da :-
    • Qualsiasi colonna in un database SQLite versione 3, ad eccezione di una colonna INTEGER PRIMARYKEY, può essere utilizzata per memorizzare un valore di qualsiasi classe di archiviazione.

    • Tipi di dati in SQLite versione 3

Tale colonna può memorizzare solo un valore intero. String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)"; equivale a inserire valori come da :-

  • NULL nel nome colonna
  • nome, come passato, nel lat colonna
  • lat, come passato, nel lon colonna
  • lon, come passato, nell'immagine colonna
  • immagine, come passata, nella colonna Id (ciao[] non può essere memorizzato nella colonna Id)

Puoi risolvere il problema fornendo i nomi delle colonne o riordinando le colonne in modo che corrispondano all'ordine in cui sono state definite (il primo è probabilmente la pratica migliore).

In quanto tale, uno dei seguenti dovrebbe risolvere il problema:-

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

oppure :-

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