Autore Topic: [SQL] Problema con FOREIGN KEY  (Letto 586 volte)

Offline Tony83

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2 - I9100
  • Sistema operativo:
    OmniRom 4.4.2
[SQL] Problema con FOREIGN KEY
« il: 08 Febbraio 2014, 21:19:54 CET »
0
Ciao,
ho bisogno di creare una Foreign keys tra la tabella SOGLIA  e la tabella CONFIGURATION (tante soglie per una configurazione ad esempio).
Ho eseguito tutto correttamente (di seguito gli script), ma facendo un test di una insert (di seguito anche sql di insert) eseguito su un client SqlLite da Androd (SQLite Debugger), sembra non esistere nessuna chiave (infatti dal client del db non vedo scritto da nessuna parte foreign key).

Il test mi ha fatto inserire la riga sul db con successo, nonostante l'ID della chiave esterna non esiste su tabella configuration.

TABELLA CONFIGURATION

  // metodo per ottenere la query di creazione della tabella

    public static String getCreateQuery() {

        String createQuery = "CREATE TABLE IF NOT EXISTS "

                + ConfigurationTable.TABLE_NAME + " ("

                + Columns.CONFIGURATION_ID.toString()

                + " INTEGER PRIMARY KEY AUTOINCREMENT, "

                + Columns.NOME.toString() + " TEXT UNIQUE NOT NULL, "

                + Columns.DATA_CREAZIONE.toString() + " DATETIME NOT NULL, "

                + Columns.AUTORE.toString() + " VARCHAR(20), "

                + Columns.VERSIONE.toString() + " VARCHAR(10));";

        Log.d(log_class_name, "createQuery:" + createQuery);

        return createQuery;

    }


TABELLA SOGLIA

   // metodo per ottenere la query di creazione della tablla

    public static String getCreateQuery() {

        String createQuery = "CREATE TABLE IF NOT EXISTS "

                + SogliaTable.TABLE_NAME + " (" + Columns.SOGLIA_ID.toString()

                + " INTEGER PRIMARY KEY AUTOINCREMENT, "

                + Columns.TIPO.toString() + " VARCHAR(12) NOT NULL, "

                + Columns.FREQUENZA.toString() + " VARCHAR(12) NOT NULL, "

                + Columns.GIORNO_INIZIO_MESE.toString() + " INTEGER, "

                + Columns.GIORNO_INIZIO_SETTIMANA.toString() + " VARCHAR(12), "

                + Columns.VALORE.toString() + " INTEGER NOT NULL, "

                + Columns.UNITA_DI_MISURA.toString() + " VARCHAR(12) NOT NULL, "

                + Columns.CONFIGURATION_ID.toString() + " INTEGER NOT NULL, "

                + "FOREIGN KEY("+Columns.CONFIGURATION_ID.toString()+") REFERENCES "+ConfigurationTable.getName()+"("+ConfigurationTable.Columns.CONFIGURATION_ID.toString()+"));";

        Log.d(log_class_name, "createQuery:" + createQuery);

        return createQuery;

    }



INSERT DI PROVA:


INSERT INTO SOGLIA (SOGLIA_ID, TIPO, FREQUENZA, GIORNO_INIZIO_MESE, GIORNO INIZIO_SETTIMANA,VALORE,UNITA_DI_MISURA,CONFIGURATION_ID)
VALUES (2,TEL,MESE,1,LUNEDI,50,MINUTI,2);

-- id 2 per configuration. non esiste !!

Post unito: [time]08 Febbraio 2014, 21:24:45 CET[/time]

Aggiungo nomi tabelle e colonne :


CLASSE: ConfigurationTable

    private static final String TABLE_NAME = "configuration";

    public enum Columns {
   CONFIGURATION_ID("configurationId", 0), NOME("nome", 1), DATA_CREAZIONE(
      "dataCreazione", 2), AUTORE("autore", 3), VERSIONE("versione",
      4);

***********************************

    private static final String TABLE_NAME = "SOGLIA";

    public enum Columns {
   SOGLIA_ID("sogliaId", 0), TIPO("tipo", 1), FREQUENZA("frequenza", 2), GIORNO_INIZIO_MESE(
      "giornoInizioMese", 3), GIORNO_INIZIO_SETTIMANA(
      "giornoInizioSettimana", 4), VALORE("valore", 5), UNITA_DI_MISURA(
      "unitaDiMisura", 6), CONFIGURATION_ID("configurationId", 7);

« Ultima modifica: 08 Febbraio 2014, 21:26:36 CET da Tony83, Reason: Merged DoublePost »

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:[SQL] Problema con FOREIGN KEY
« Risposta #1 il: 09 Febbraio 2014, 10:17:44 CET »
+1
SQLite ha una gestione tutta strana delle constraints in generale ed anche delle chiavi esterne.
Ad ogni connessione devi attivarle in questo modo:
Codice: [Seleziona]
PRAGMA foreign_keys = true;
Forse è questo il tuo problema.
Qui c'è il sito ufficiale che lo spiega: http://www.sqlite.org/pragma.html#pragma_foreign_keys