Android: insertar registro sqlite con la columna AUTOINCREMENT

Tengo una base de datos sqlite en android creado de esta manera:

sqlite> .schema CREATE TABLE criterion ('_id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, active text, important text, sort int, summary text, user text, category_id int, entrytype int); 

La única manera en la que puedo insertar un registro en esta tabla es especificando un valor para _id que quiero incrementar automáticamente. Esta es la única manera en que puedo conseguir que el inserto funcione:

 recid = totalrecs + 1; String q = "insert into criterion (_id, active, important, sort, summary, user, category_id, entrytype) values (" + recid + ", \"1\", \"0\", 99, \"foobar\", \"1\", 99, 0)"; Log.d (TAG, "query:" + q); mDb.execSQL (q); 

Si dejo la columna _id fuera y no especifico un valor para _id, obtengo un error:

 android.database.sqlite.SQLiteConstraintException: criterion._id may not be NULL: insert into criterion(active, important, sort, summary, user, category_id, entrytype) values ("1", "0", 99, "foobar", "1", 99, 0) 

¿Cómo organizo la consulta (o el esquema) para que Android se encargue de incrementar la columna _id ?

Actualizar / fijar 2 líneas arriba (eliminado NO NULO, eliminado _id de la consulta):

 CREATE TABLE criterion ('_id' INTEGER PRIMARY KEY AUTOINCREMENT, active text, important text, sort int, summary text, user text, category_id int, entrytype int); String q = "insert into criterion (active, important, sort, summary, user, category_id, entrytype) values (\"1\", \"0\", 99, \"foobar\", \"1\", 99, 0)"; 

Eliminar el NOT NULL del esquema y usted es de oro.

Aclarar: Especificar NOT NULL en una columna de incremento automático hace que el incremento automático no funcione. El NOT NULL es lo que lo está haciendo así que tienes que especificar el _id.

Una vez que lo elimine y no incluya el _id en la instrucción insert, SQL recibirá el _id como NULL y automáticamente manejará la configuración del _id para usted.

  • Android concurrencia sqlite sin excepciones
  • ¿Existe un caché de memoria para SQLite en Android y cómo liberarlo o borrarlo?
  • Android classificar los resultados de la consulta sqlite ignorando el caso
  • Cambio de valores desde Cursor mediante SimpleCursorAdapter
  • SQLite ordena caracteres especiales alfabéticamente
  • No pudo leer la fila 0, la columna -1
  • Androide. Proveedor de contenido o base de datos?
  • Cómo eliminar la base de datos en sqlite?
  • Cómo importar la biblioteca Persistence Room a un proyecto de Android
  • Obtener nueva fila agregada en la tabla SQLite
  • ¿Cómo popule ListView con elementos de la base de datos en Xamarin?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.