Android table creation Fallo (cerca de "autoincrement": error de sintaxis)?

public static final String MYDATABASE_NAME = "MY_DATABASE"; public static final String MYDATABASE_TABLE = "MY_TABLE"; public static final String MYDATABASE_TABLE2 = "MY_TABLE2"; public static final int MYDATABASE_VERSION = 1; public static final String KEY_ID = "_id"; public static final String KEY_ID2 = "_id2"; public static final String KEY_CONTENT1 = "Content1"; public static final String KEY_CONTENT2 = "Content2"; public static final String KEY_CONTENT3 = "Content3"; //create table MY_DATABASE (ID integer primary key, Content text not null); private static final String SCRIPT_CREATE_DATABASE = "create table " + MYDATABASE_TABLE + " (" +KEY_ID + " integer primary key autoincrement, " + KEY_CONTENT1 + " text not null);"; private static final String SCRIPT_CREATE_DATABASE2 = "create table " + MYDATABASE_TABLE2 + " (" + KEY_ID2 + " integer autoincrement, " + KEY_CONTENT2 + " text not null, " + KEY_CONTENT3 + " text not null, " + " FOREIGN KEY ("+KEY_ID2+") REFERENCES "+MYDATABASE_TABLE+" ("+KEY_ID+"));"; 

No puedo averiguar lo que da el siguiente error, por favor, ayúdame a dar las gracias.

09-29 13: 41: 19.760: ERROR / Database (334): Fallo 1 (cerca de "autoincrement": error de sintaxis) en 0x218df0 al preparar 'create table MY_TABLE2 (_id2 autoincremento entero, Content2 texto no nulo, FOREIGN KEY (_id2) REFERENCIAS MY_TABLE (_id)); '.

09-29 13: 41: 19.770: DEBUG / AndroidRuntime (334): Apagado de VM

09-29 13: 41: 19.770: WARN / dalvikvm (334): threadid = 1: hilo que sale con excepción no captada (grupo = 0x4001d800)

09-29 13: 41: 19.791: ERROR / AndroidRuntime (334): EXCEPCIÓN FATAL: main

09-29 13: 41: 19.791: ERROR / AndroidRuntime (334): java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo {sep.com/sep.com.SepActivity}: android.database.sqlite.SQLiteException: cerca de "autoincrement ": Error de sintaxis: create table MY_TABLE2 (_id2 entero autoincrement, Content2 texto no nulo, Content3 texto no nulo, FOREIGN KEY (_id2) REFERENCIAS MY_TABLE (_id));

En resumen: In SQLite a column declared INTEGER PRIMARY KEY will autoincrement. No existe una palabra clave de autoincrement en SQLite, por eso está recibiendo un error.

Puede obtener más información sobre las preguntas frecuentes de SQLite .

EDIT: sólo escribir integer primary key es suficiente. SQLite aumentará automáticamente sus ids .

EDIT2: Su método onUpgrade() debería tener este aspecto:

  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (newVersion > oldVersion) { Log.w("MyAppTag","Updating database from version " + oldVersion + " to " + newVersion + " .Existing data will be lost."); db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE); db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE2); onCreate(db); } 

Esta:

 + KEY_ID2 + " integer autoincrement, " 

Debe ser esto:

 + KEY_ID2 + " integer primary key autoincrement, " 

Si sigue los diagramas de sintaxis de CREATE TABLE , verá que el autoincrement sólo debe aparecer después de primary key .

Introduzca aquí la descripción de la imagenIntroduzca aquí la descripción de la imagen

Si desea _id2 ser una clave extranjera, entonces no desea que sea el incremento automático en todo sin embargo.

Una respuesta anterior dice que 'no hay autoincrement palabra clave en SQLite.' Esto es incorrecto. Hay una palabra clave llamada "autoincrement" y lo usé en la clave principal.

Por ejemplo:

  static final String CREATE_LOCATION_TABLE="CREATE TABLE Location"+ "( LocationID INTEGER PRIMARY KEY AUTOINCREMENT," + " RestuarantID int not null," + " Latitude float not null," + " Longitude float not null)"; 

También asegúrese de que al introducir datos en esta tabla utilice la palabra clave 'null' en el lugar de la clave principal.

Me gusta esto:

  static final String INSERT_LOCATION= "Insert into Location values" + "(null,1002,6.905369,79.851514)"; 

Tres cosas:

  • Retire el arrastrero; De las declaraciones.
  • Añadir restricción de "clave primaria" a la columna de autoincremento
  • Elimine el autoincremento de las columnas de PK – esto sucederá automáticamente.
 sqlite> CREATE TABLE app (a INTEGER PRIMARY KEY NOT NULL, B VARCHAR); sqlite> insert into app (b) values (''); sqlite> insert into app (b) values ('a'); sqlite> sqlite> insert into app (b) values ('b'); sqlite> insert into app (b) values ('c'); sqlite> insert into app (b) values ('d'); sqlite> select * from app; 1| 2|a 3|b 4|c 5|d sqlite> exit; 

NOTA: En SQLite no hay AUTOINCREMENT palabra clave AUTOINCREMENT . Por lo tanto, sólo tiene que utilizar INTEGER PRIMARY KEY NOT NULL . Insertará automáticamente el valor incrementado para el atributo.

  • Malo rendimiento de SQLite en almacenamiento externo en Android
  • Cómo acceder a la base de datos SQLite dentro de un archivo zip - android
  • Creación de una función personalizada en sqlite3 en android
  • SQLite - No se pudo abrir el archivo de base de datos
  • java.lang.NullPointerException error en una consulta
  • Base de datos sqlite pre-relleno android
  • Las teclas de cursor no funcionan cuando se utiliza sqlite3 desde el shell de adb
  • Exportar archivo de base de datos sqlite en XML y luego en la hoja de cálculo de Excel
  • ¿Cuál es el propósito de startManagingCursor?
  • Comprobación de la existencia de una columna en una base de datos de aplicaciones en Android
  • Android concurrencia sqlite sin excepciones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.