Autore Topic: SQLite Database Browser e foreign keys  (Letto 884 volte)

iClaude

  • Visitatore
SQLite Database Browser e foreign keys
« il: 23 Maggio 2013, 18:45:42 CEST »
0
Sto testando un database che fa uso di una foreign key, ma con il software SQLite Database Browser (sourcefourge) pare che la foreign key non funzioni.
Per chi usa questo software, vi risulta che SQLite Databse Browser non gestisce le foreign keys, oppure c'è qualche errore nel mio codice SQL?

Prima tabella:
CREATE TABLE spese_voci(_id integer primary key autoincrement, voce TEXT UNIQUE NOT NULL);

Seconda tabella:
CREATE TABLE spese_sost(_id integer primary key autoincrement, data INTEGER, voce TEXT, importo REAL, valuta TEXT NOT NULL, importo_valprin REAL, descrizione TEXT, ripetizione_id INTEGER, FOREIGN KEY(voce) REFERENCES spese_voci(voce) ON UPDATE CASCADE ON DELETE CASCADE);

grazie

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:SQLite Database Browser e foreign keys
« Risposta #1 il: 23 Maggio 2013, 19:23:48 CEST »
0
Sto testando un database che fa uso di una foreign key, ma con il software SQLite Database Browser (sourcefourge) pare che la foreign key non funzioni.
Per chi usa questo software, vi risulta che SQLite Databse Browser non gestisce le foreign keys, oppure c'è qualche errore nel mio codice SQL?

Prima tabella:
CREATE TABLE spese_voci(_id integer primary key autoincrement, voce TEXT UNIQUE NOT NULL);

Seconda tabella:
CREATE TABLE spese_sost(_id integer primary key autoincrement, data INTEGER, voce TEXT, importo REAL, valuta TEXT NOT NULL, importo_valprin REAL, descrizione TEXT, ripetizione_id INTEGER, FOREIGN KEY(voce) REFERENCES spese_voci(voce) ON UPDATE CASCADE ON DELETE CASCADE);

grazie
si non le supporta. C'era un modo alternativo ma non ricordo,cerca pragma SQLite online,forse trovi

Inviato dal mio Nexus 7 con Tapatalk 2
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:SQLite Database Browser e foreign keys
« Risposta #2 il: 23 Maggio 2013, 20:13:44 CEST »
0
Sono sopportati i foreign key ma sono disabilitati di default, come scritto nella documentazione ufficiale:

SQLite Foreign Key Support

dopo aver aperto il DB basta inviare questa direttiva al DB:

Codice (SQL): [Seleziona]
PRAGMA foreign_keys = ON;
adb logcat | tee /tmp/logcat | grep TAG

iClaude

  • Visitatore
Re:SQLite Database Browser e foreign keys
« Risposta #3 il: 28 Maggio 2013, 18:54:25 CEST »
0
Sono sopportati i foreign key ma sono disabilitati di default, come scritto nella documentazione ufficiale:

SQLite Foreign Key Support

dopo aver aperto il DB basta inviare questa direttiva al DB:

Codice (SQL): [Seleziona]
PRAGMA foreign_keys = ON;

Ho provato a lanciare il comando, ma le foreign keys continuano a non funzionare...

Post unito: 28 Maggio 2013, 19:23:25 CEST
Chiedo inoltre una conferma.
Googolando ho trovato che per usare le foreign keys da un'app Android è necessario inserire il PRAGMA ogni volta che si apre il database in scrittura, es.:
      mioSQLiteDatabase = mioDatabaseOpenHelper.getWritableDatabase();
      mioSQLiteDatabase.execSQL("PRAGMA foreign_keys=ON;"); // bisogna abilitare le foreign keys qui

Vi risulta?
Ho anche trovato che inserire il comando direttamente nella classe che estende SQLiteOpenHelper, ad esempio nel metodo onOpen, non funziona...
« Ultima modifica: 28 Maggio 2013, 19:25:08 CEST da iClaude »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:SQLite Database Browser e foreign keys
« Risposta #4 il: 28 Maggio 2013, 20:50:14 CEST »
0
Si, il "PRAGMA foreign_keys = on;" non è permanete, deve essere attivato dopo aver aperto il database, se si chiude viene perso.

Con API 16 di Android hanno aggiunto il supporto ai foreign keys:

SQLiteDatabase | Android Developers

Se vuoi puoi fare la prova sul PC, insieme al SDK viene distribuito il comando "sqlite3", se crei un database e abiliti i foreign keys alla successiva riapertura sono disabilitati.
« Ultima modifica: 28 Maggio 2013, 20:52:49 CEST da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG