sql >> Base de Datos >  >> RDS >> SQLite

Falta de coincidencia del tipo de datos (código 20) al insertar

Creo que su problema es con el orden de las columnas y, lo que es más importante, la restricción de un alias para la columna de ID de fila, en su caso, el Id columna (Id INTEGER PRIMARY KEY AUTOINCREMENT define Id como un alias de la columna rowid ).

  • Tenga en cuenta que otras columnas pueden almacenar cualquier valor según :-
    • Cualquier columna en una base de datos SQLite versión 3, excepto una columna INTEGER PRIMARYKEY, puede usarse para almacenar un valor de cualquier clase de almacenamiento.

    • Tipos de datos en SQLite versión 3

Dicha columna solo puede almacenar un valor entero. String sql = "INSERT INTO PHOTO VALUES(NULL,?,?,?,?)"; equivale a insertar valores según :-

  • NULL en el nombre columna
  • nombre, como se pasa, en el lat columna
  • lat, como pasado, en el lon columna
  • lon, pasado, en la imagen columna
  • imagen, tal como se pasó, en la columna Id (adiós[] no se puede almacenar en la columna Id)

Puede solucionar esto ya sea proporcionando los nombres de las columnas o reordenando las columnas para que coincidan con el orden en el que se definieron (posiblemente la primera sea la mejor práctica).

Como tal, cualquiera de los siguientes debería solucionar el problema:-

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

o :-

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