SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Incompatibilidade de tipo de dados (código 20) ao inserir


Acho que seu problema é com a ordem das colunas e, mais importante, a restrição de um alias para a coluna rowid, no seu caso, o Id coluna (Id INTEGER PRIMARY KEY AUTOINCREMENT define ID como um alias da coluna rowid ).
  • Observe que outras colunas podem armazenar qualquer valor conforme :-

    • Qualquer coluna em um banco de dados SQLite versão 3, exceto uma coluna INTEGER PRIMARYKEY, pode ser usada para armazenar um valor de qualquer classe de armazenamento.
    • Tipos de dados no SQLite versão 3

Essa coluna só pode armazenar um valor inteiro. String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)"; equivale a inserir valores de acordo com:-
  • NULL no nome coluna
  • nome, conforme passado, no lat coluna
  • lat, conforme passado, no lon coluna
  • lon, conforme passado, na imagem coluna
  • imagem, conforme passado, na coluna ID (tchau[] não pode ser armazenado na coluna Id)

Você pode corrigir isso fornecendo os nomes das colunas ou reordenando as colunas para corresponder à ordem em que foram definidas (o primeiro, sem dúvida, a melhor prática).

Como tal, qualquer um dos seguintes deve corrigir o problema:-
String sql = "INSERT INTO PHOTO (Id, name, lat, lon, image) VALUES(NULL,?,?,?,?)";

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