sql >> Database >  >> RDS >> SQLite

Datatype komt niet overeen (code 20) tijdens het invoegen

Ik denk dat je probleem zit in de kolomvolgorde en vooral de beperking van een alias voor de rowid-kolom, in jouw geval de Id kolom (Id INTEGER PRIMARY KEY AUTOINCREMENT definieert Id als een alias van de rowid-kolom ).

  • Merk op dat andere kolommen elke waarde kunnen opslaan volgens :-
    • Elke kolom in een SQLite versie 3-database, behalve een INTEGER PRIMARYKEY-kolom, kan worden gebruikt om een ​​waarde van elke opslagklasse op te slaan.

    • Gegevenstypen in SQLite versie 3

Zo'n kolom kan alleen een geheel getal opslaan. String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)"; komt overeen met het invoegen van waarden volgens:-

  • NULL in de naam kolom
  • naam, zoals doorgegeven, in de lat kolom
  • lat, zoals doorgegeven, in de lon kolom
  • lon, zoals doorgegeven, in de afbeelding kolom
  • afbeelding, zoals doorgegeven, in de Id-kolom (tot ziens[] kan niet worden opgeslagen in de ID-kolom)

U kunt dit oplossen door de kolomnamen op te geven of door de kolommen opnieuw te ordenen zodat ze overeenkomen met de volgorde waarin ze zijn gedefinieerd (de eerste is waarschijnlijk de betere praktijk).

Als zodanig zou een van de volgende zaken het probleem moeten oplossen:-

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

of:-

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



  1. Exporteer SQL-querygegevens naar Excel

  2. Unitils en DBMaintainer - hoe kan ik ze laten werken met meerdere gebruikers/schema's?

  3. Controleren of een item niet in een andere tabel voorkomt

  4. Vraag en antwoord uit onze webinarserie Parameter Sniffing