SQLite DB 2013/14 Programmazione di disposi8vi mobili - v1.1 1 SQLite3 Libreria da usare in un programma hcps://www.sqlite.org/ in android è installata Installare ed usare sulla shell Tante UI da NON usare J hcp://sqlitestudio.pl/ Programmazione Java per Disposi8vi Mobili 2 Programmazione Java per Disposi8vi Mobili 1
Database relazionali Da8 raccol8 in tabelle non ordinate: relazioni colonne: campi, acribu8, fields righe: tuple, records Utenti (CF, nome, cognome) CF nome cognome BNCFR... Franco Bianchi VRDGS... Giuseppe RSSMR... Mario Verdi Rossi Libri (ISBN, autore, titolo) ISBN autore titolo 111111111 Caroll Alice in W 22222222 Tanenbaum Reti di Calc 33333333 AA. VV. Lonely Plan 44444444 Hofstadter GEB-EGB Prestiti (utente, libro, dataprestito, datarestituzione) utente libro dataprestito datarestituzione RSSMR... 22222222 12/12/2012 - VRDGS... 44444444 01/10/2011 11/11/2011 2014-2015 Programmazione Web 3 Vincoli di integrità Evitano che vengano inserite informazioni "non possibili" Esistono da8 che sono sintavcamente correv ma non rappresentano informazioni possibili per l applicazione di interesse Vincoli di dominio 8po di dato ammesso per un campo Chiavi primarie Insieme di acribu8 che iden8ficano univocamente le tuple di una relazione Vincoli di tupla relazioni interne fra i da8 Vincoli di integrità referenziale Fanno riferimento a chiavi primarie su altre relazioni SoddisfaV se valore esiste nell'altra relazione 2014-2015 Programmazione Web 4 Programmazione Java per Disposi8vi Mobili 2
Vincoli di dominio Tipi di dato che uso per le diverse colonne Il codice fiscale ha il suo formato Utenti (CF, nome, cognome) CF nome cognome BNCFR... Franco Bianchi VRDGS... Giuseppe Verdi RSSMR... Mario Rossi Devono esistere Libri (ISBN, autore, titolo) ISBN autore titolo 111111111 Caroll Alice in W 22222222 Tanenbaum Reti di Calc 33333333 AA. VV. Lonely Plan 44444444 Hofstadter GEB-EGB Prestiti (utente, libro, dataprestito, datarestituzione) utente libro dataprestito datarestituzione RSSMR... 22222222 12/12/2012 - VRDGS... 44444444 01/10/2011 11/11/2011 2014-2015 Programmazione Web 5 Chiavi Primarie Insieme di acribu8 che iden8ficano univocamente le tuple di una relazione Almeno una per ogni relazione Possono essere definite su più acribu8 Se non esiste una chiave, va definita (es. valore incrementale) Utenti (CF, nome, cognome) CF nome cognome BNCFR... Franco Bianchi VRDGS... Giuseppe Verdi RSSMR... Mario Rossi Devono esistere Libri (ISBN, autore, titolo) ISBN autore titolo 111111111 Caroll Alice in W 22222222 Tanenbaum Reti di Calc 33333333 AA. VV. Lonely Plan 44444444 Hofstadter GEB-EGB Prestiti (utente, libro, dataprestito, datarestituzione) utente libro dataprestito datarestituzione RSSMR... 22222222 12/12/2012 - VRDGS... 44444444 01/10/2011 11/11/2011 2014-2015 Programmazione Web 6 Programmazione Java per Disposi8vi Mobili 3
Vincoli di tupla datapres8to < datares8tuzione Utenti (CF, nome, cognome) CF nome cognome BNCFR... Franco Bianchi VRDGS... Giuseppe Verdi RSSMR... Mario Rossi Devono esistere Libri (ISBN, autore, titolo) ISBN autore titolo 111111111 Caroll Alice in W 22222222 Tanenbaum Reti di Calc 33333333 AA. VV. Lonely Plan 44444444 Hofstadter GEB-EGB Prestiti (utente, libro, dataprestito, datarestituzione) utente libro dataprestito datarestituzione RSSMR... 22222222 12/12/2012 - VRDGS... 44444444 01/10/2011 11/11/2011 2014-2015 Programmazione Web 7 Vincoli di integrità referenziale Fanno riferimento a chiavi primarie su altre relazioni SoddisfaV se valore esiste nell'altra relazione Utenti (CF, nome, cognome) CF nome cognome BNCFR... Franco Bianchi VRDGS... Giuseppe Verdi RSSMR... Mario Rossi Devono esistere Libri (ISBN, autore, titolo) ISBN autore titolo 111111111 Caroll Alice in W 22222222 Tanenbaum Reti di Calc 33333333 AA. VV. Lonely Plan 44444444 Hofstadter GEB-EGB Prestiti (utente, libro, dataprestito, datarestituzione) utente libro dataprestito datarestituzione RSSMR... 22222222 12/12/2012 - VRDGS... 44444444 01/10/2011 11/11/2011 2014-2015 Programmazione Web 8 Programmazione Java per Disposi8vi Mobili 4
Esercizio comandi sql Programmazione Java per Disposi8vi Mobili 9 Programmazione Java per Disposi8vi Mobili 10 Programmazione Java per Disposi8vi Mobili 5
Database locale Le app possono creare un db locale per memorizzare i da8 Il db è SQLite libreria per ges8re un db in un file Path db /data/data/<your.package.name>/databases/<database- name>.db Programmazione Java per Disposi8vi Mobili 11 SQLiteDatabase android.database.sqlite.sqlitedatabase Apertura db ma anche da context Interfaccia db SQL raw execsql create update e delete rawquery retrive Metodi specifici insert, query, update, delete Programmazione Java per Disposi8vi Mobili 12 Programmazione Java per Disposi8vi Mobili 6
Apertura DB opendatabase(string path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorhandler) This method only opens the exis8ng database with the appropriate flag mode. The common flags mode could be OPEN_READWRITE OPEN_READONLY opendatabase(string path, SQLiteDatabase.CursorFactory factory, int flags) It is similar to the above method as it also opens the exisi8ng database but it does not define any handler to handle the errors of databases openorcreatedatabase(string path, SQLiteDatabase.CursorFactory factory) It not only opens but create the datbase if it not exists. This method is equivalent to opendatabase method openorcreatedatabase(file file, SQLiteDatabase.CursorFactory factory) This method is similar to above method but it takes the File object as a path rather then a string. It is equavilent to file.getpath() Programmazione Java per Disposi8vi Mobili 13 execsql Usato per inserire da8 ma anche modificare il db o cancellare righe. "Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data" mydatabase.execsql("create TABLE IF NOT EXISTS Uten8(nomeVARCHAR,passwordVARCHAR);"); mydatabase.execsql("insert INTO Uten8 VALUES('admin','admin');"); execsql(string sql) Programmazione Java per Disposi8vi Mobili 14 Programmazione Java per Disposi8vi Mobili 7
rowquery String q = "SELECT * FROM Uten8"; Cursor mcursor = mdb.rawquery(q, null); q = "SELECT * FROM Uten8 WHERE nome = 'admin'" ; mcursor = mdb.rawquery(q, null); q = "SELECT nome FROM Uten8 WHERE nome =? AND password =?" mcursor = mdb.rawquery(q, new String[] {"admin", "wrwerwer"); Programmazione Java per Disposi8vi Mobili 15 Cursor Iteratore su una tabella di valori Result Set Metodi cursor.movetofirst() cursor.movetonext() cursor.getstring(0) cursor.getint(1) Programmazione Java per Disposi8vi Mobili 16 Programmazione Java per Disposi8vi Mobili 8
esempio String q= "SELECT * FROM Uten8"; SQLiteDatabase db =... Cursor cursor = db.rawquery(q, null); if (cursor.movetofirst()) { do { int id = cursor.getint(0); String name cursor.getstring(1);... while (cursor.movetonext()); Programmazione Java per Disposi8vi Mobili 17 Metodi di cursor getcolumncount() This method return the total number of columns of the table. getcolumnindex(string columnname) This method returns the index number of a column by specifying the name of the column getcolumnname(int columnindex) This method returns the name of the column by specifying the index of the column getcolumnnames() This method returns the array of all the column names of the table. getcount() This method returns the total number of rows in the cursor getposi8on() This method returns the current posi8on of the cursor in the table isclosed() This method returns true if the cursor is closed and return false otherwise Programmazione Java per Disposi8vi Mobili 18 Programmazione Java per Disposi8vi Mobili 9
insert SQLiteDatabase db =... ContentValues contentvalues = new ContentValues(); contentvalues.put("nome","pier"); contentvalues.put("password","hksksj"); db.insert("uten8",null,contentvalues); Programmazione Java per Disposi8vi Mobili 19 Programmazione Java per Disposi8vi Mobili 20 Programmazione Java per Disposi8vi Mobili 10
SQLiteOpenHelper Classe di u8lità per ges8re DB Metodi oncreate(sqlitedatabase) onupgrade(sqlitedatabase, int, int) onopen(sqlitedatabase) - opzionale getreadabledatabase() Create and/or open a database. getwritabledatabase() Create and/or open a database that will be used for reading and wri8ng. Programmazione Java per Disposi8vi Mobili 21 SQLiteOpenHelper public class DBHelper extends SQLiteOpenHelper { public DBHelper(){ super(context,database_name,null,1); public void oncreate(sqlitedatabase db) {... public void onupgrade(sqlitedatabase database, int oldversion, int newversion) {... Programmazione Java per Disposi8vi Mobili 22 Programmazione Java per Disposi8vi Mobili 11
DBHelperSingleton public class DBHelperSingleton extends SQLiteOpenHelper { private sta8c DBHelperSingleton sinstance; private sta8c final String DATABASE_NAME = "database_name"; private sta8c final String DATABASE_TABLE = "table_name"; private sta8c final int DATABASE_VERSION = 1; public sta8c synchronized DBHelperSingleton getinstance(context context) { if (sinstance == null) { sinstance = new DBHelperSingleton(context.getApplica8onContext()); return sinstance; private DBHelperSingleton (Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION);... Programmazione Java per Disposi8vi Mobili 23 Programmazione Java per Disposi8vi Mobili 12