Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


SQlite – Android – Sintaxis de clave extranjera

He estado intentando conseguir las llaves extranjeras que trabajan dentro de mi base de datos del SQLite de SQLite. He intentado la sintaxis siguiente pero me da una fuerza cerca:

private static final String TASK_TABLE_CREATE = "create table " + TASK_TABLE + " (" + TASK_ID + " integer primary key autoincrement, " + TASK_TITLE + " text not null, " + TASK_NOTES + " text not null, " + TASK_DATE_TIME + " text not null, FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+" ("+CAT_ID+"));"; 

Alguna idea de lo que podría estar haciendo mal? Si usted necesita ver la otra estructura de la tabla entonces puedo, su apenas una estructura muy simple para el segundo con una identificación y un nombre.

Editar:

Aquí está el error:

03-13 13: 42: 35.389: ERROR / AndroidRuntime (312): Causado por: android.database.sqlite.SQLiteException: columna desconocida "taskCat" en la definición de clave externa: crear recordatorios de tabla (_id entero autoincrement de clave principal, texto de task_title no Null, texto de notas no nulo, recordatorio_date_time texto no nulo, FOREIGN KEY (taskCat) REFERENCIAS category (_id));

  • ¿Cómo seleccionar valores distintos de una columna en la tabla?
  • Android: Sugar ORM No hay tal excepción de tabla
  • Eliminación de fila en SQLite en Android
  • Adb shell setprop log.tag.SQLiteStatements VERBOSE no hace nada?
  • Consulta sqlite de Android para que coincida con la columna que contiene el texto
  • Necesidad de almacenar LOTES de datos en el dispositivo Android, pensando en ir OODB
  • ¿Cómo crear un widget de Android con opciones?
  • Cómo quitar filas consecutivas con datos duplicados en ciertos campos (en SQLite)?
  • 3 Solutions collect form web for “SQlite – Android – Sintaxis de clave extranjera”

    TASK_CAT debe definir su columna TASK_CAT y luego establecer la clave externa en ella.

     private static final String TASK_TABLE_CREATE = "create table " + TASK_TABLE + " (" + TASK_ID + " integer primary key autoincrement, " + TASK_TITLE + " text not null, " + TASK_NOTES + " text not null, " + TASK_DATE_TIME + " text not null," + TASK_CAT + " integer," + " FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+"("+CAT_ID+"));"; 

    Más información que puede encontrar en sqlite foreign keys doc .

    Desde que no puedo comentar, la adición de esta nota, además de @jethro respuesta.

    Me enteré de que también necesita hacer la línea FOREIGN KEY como la última parte de crear la declaración de la tabla, de lo contrario obtendrá un error de sintaxis al instalar su aplicación. Lo que quiero decir es que no se puede hacer algo como esto:

     private static final String TASK_TABLE_CREATE = "create table " + TASK_TABLE + " (" + TASK_ID + " integer primary key autoincrement, " + TASK_TITLE + " text not null, " + TASK_NOTES + " text not null, " + TASK_CAT + " integer," + " FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+" ("+CAT_ID+"), " + TASK_DATE_TIME + " text not null);"; 

    Donde pongo el TASK_DATE_TIME después de la línea de clave externa.

    Como puede ver en la descripción del error, su tabla contiene las columnas (_id, tast_title, notes, reminder_date_time) y está intentando agregar una clave externa de una columna "taskCat" pero no existe en su tabla!

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.