Corso di programmazione di sistemi mobile 1. Android. Persistenza dei dati
|
|
- Antonio Chiesa
- 7 anni fa
- Visualizzazioni
Transcript
1 Corso di programmazione di sistemi mobile 1 Android Persistenza dei dati
2 Corso di programmazione di sistemi mobile 2 Gestione dei file La maggior parte delle applicazioni Android ha bisogno di salvare i dati, anche solo per salvare lo stato dell'applicazione in modo che i dati dell'utente non vadano persi. I principali tipi di memorizzazione presenti sono: Database SQLite: possibilità di salvare i dati in un database SharedPreferences: per salvare una coppia chiave-valore su un file xml generato dal sistema Internal storage: spazio interno che risiede in una parte del filesystem a cui solo la nostra l applicazione può accedere. External storage: spazio esterno spesso si ci riferisci a SD card esterne o alla porzione di disco accessibile da tutte le applicazioni.
3 Corso di programmazione di sistemi mobile 3 Internal Storage Ogni applicazione dispone di un area protetta ed esclusiva all interno della quale può effettuare una qualsiasi operazione senza arrecare inconvenienti al sistema o alle altre applicazioni installate. La classe Activity dispone dei metodi utili per accedere alla porzione di file system assegnata e ottenere il riferimento ad uno stream in lettura o scrittura: public FileInputStream openfileinput(string name); Se il file non è presente all interno della memoria dell applicazione viene lanciata un eccezzione. public FileOutputStream openfileoutput(string name, int mode); Restituisce un oggetto che può essere manipolato come un qualsiasi output stream di Java. Il parametro mode indica il tipo di scrittura del file. (si possono usare combinazioni tramite l operatore binario OR) Context.MODE_PRIVATE Context.MODE_APPEND Context.MODE_WORLD_READABLE Context.MODE_WORLD_WRITEABLE Rende il file privato e accessibile solo alla nostra applicazione Se il file esiste invece di sovrascriverlo gli accoda i nuovi byte che saranno scritti nello stream Rende il file accessibile in sola lettura dalle altre applicazioni installate nel sistema Rende il file accessibile in sola scrittura dalle altre applicazioni installate nel sistema.
4 Corso di programmazione di sistemi mobile 4 External Storage I dispositivi Android dispongono di un secondo spazio di memoria, definito "External storage". Solitamente è una porzione di disco oppure una scheda di memoria che può all occorrenza essere rimossa e sostituita. Quando si vuole scrivere sulla memoria esterna bisogna accertarsi che essa sia disponibile, il metodo per verificare lo stato è contenuto staticamente nella classe android.os.environment: public static String getexternalstoragestate(); Environment.MEDIA_MOUNTED Environment.MEDIA_MOUNTED_READ_ONLY Environment.MEDIA_UNMOUNTED Environment.MEDIA_UNMOUNTABLE Environment.MEDIA_BAD_REMOVAL Environment.MEDIA_CHECKING Environment.MEDIA_NOFS Environment.MEDIA_REMOVED Environment.MEDIA_SHARED È possibile scrivere e leggere sulla memoria esterna È possibile solo leggere la memoria esterna Uno qualsiasi di questi valori indica che la memoria esterna non è accessibile e non si possono eseguire operazioni di I/O
5 Corso di programmazione di sistemi mobile 5 Una volta accertati che sia possibile accedere alla memoria esterna, è possibile recupere il percorso sempre attraverso il metodo statico di Environment: public static File getexternalstoragedirectory(); Il file restituito è la radice della memoria esterna, è anche possibile recuperare una delle cartelle pubbliche attraverso il metodo: public static File getexternalstoragepublicdirectory(string type); Environment.DIRECTORY_ALARMS Environment.DIRECTORY_DCIM Environment.DIRECTORY_DOCUMENTS Environment.DIRECTORY_DOWNLOADS Environment.DIRECTORY_MOVIES Environment.DIRECTORY_MUSIC Environment.DIRECTORY_NOTIFICATIONS Environment. DIRECTORY_PICTURES Environment.DIRECTORY_PODCASTS Environment.DIRECTORY_RINGTONES Directory in cui collocare tutti i file audio da utilizzare come allarmi Directory per le foto e i video Directory in cui inserire documenti che sono stati creati dall'utente Directory in cui collocare i file che sono stati scaricati dall'utente Directory in cui inserire film che sono disponibili all'utente Directory in cui collocare i file audio da utilizzare come musica Directory in cui collocare i file audio per le notifiche Directory in cui inserire immagini come screenshot Directory in cui collocare tutti i file audio podcast Directory in cui collocare tutti i file audio per la suoneria
6 Corso di programmazione di sistemi mobile 6 A differenza di quanto avviene per la memoria interna Android non mette a disposizione metodi che ritornino direttamente Stream di dati. Sarà compito dello sviluppatore creare un oggetto File e utilizzare i metodi java per effettuare operazioni di I/O String text = "Questo fiore è molto petaloso"; if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); File doc = new File(dir, "Petaloso.txt"); FileOutputStream fos = null; try { byte[] data = text.getbytes(); fos = new FileOutputStream(doc); fos.write(data); fos.flush(); catch (Exception e) { Log.e("FileOutputStream", "Errore durante la scrittura del file", e); finally { if (fos!= null) try { fos.close(); catch (Exception e) { else { Toast.makeText(this, "Impossibile accedere alla sdcard!", Toast.LENGTH_LONG).show();
7 Corso di programmazione di sistemi mobile 7 Shared Preference Le SharedPreferences sono nate dalla necessità di avere un sistema standard di salvataggio delle informazioni all interno di Android (es impostazioni dell app). Esse ci permettono di salvare dei singoli dati identificati da una chiave in maniera rapida, semplice e persistente. Il metodo: public SharedPreferences getsharedpreferences(string name, int mode) ci permette di recuperare un oggetto SharedPreference associato al nome passato in ingresso. Mode può assumere i valori: MODE_PRIVATE, MODE_WORLD_READABLE e MODE_WORLD_WRITEABLE Per recuperare un valore salvato è possibile invocare i metodi presenti all interno della classe SharedPreferences, i più comuni sono: getboolean(string key, boolean defvalue) getfloat(string key, float defvalue) getint(string key, int defvalue) getlong(string key, long defvalue) getstring(string key, String defvalue)
8 Corso di programmazione di sistemi mobile 8 Per poter salvare dei dati è necessario recuperare l oggetto SharedPreferences e invocare il metodo edit che restituisce un oggetto di tipo SharedPreferences.Editor. Come per la SharedPreferences all interno dell oggetto Editor sono disponibili i metodi per salvare i dati: putboolean(string key, boolean value) putfloat(string key, float value) putint(string key, int value) putlong(string key, long value) putstring(string key, String value) Una volta terminato l inserimento dei dati per confermare il salvataggio è necessario invocare il metodo apply() o commit(). La principale differenza tra i due metodi è che commit() esegue il salvataggio dei dati in thread separato e non restituisce il risultato dell operazione.
9 Corso di programmazione di sistemi mobile 9 Preference Activity Android mette a disposizione un framework completo per la gestione delle preference, si tratta dell insieme delle classi appartenenti al package android.preference. I componenti di gestione delle preferenze saranno contenute in una particolare specializzazione della classe Activity: PreferenceActivity il cui layout dovrà essere contenuto in un documento che avrà come root: <PreferenceScreen>. Si dovrà utilizzare inoltre la classe PreferenceFragment poiché PrefenceActivity ha dei metodi deprecati. public class MyPreferenceFragment extends PreferenceFragment public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //Caricamento delle preferenze dal file XML addpreferencesfromresource(r.xml.setting);
10 Corso di programmazione di sistemi mobile 10 Un esempio di file setting.xml <PreferenceScreen xmlns:android=" <PreferenceCategory <CheckBoxPreference android:key="checkbox_preference" /> </PreferenceCategory> </PreferenceScreen> PreferenceScreen rappresenta la radice della gerarchia delle preferenze, le preferenze possono essere inoltre raggruppate in tag PreferenceCategory. Questa implementazione popola in automatico le preferenze una volta create e ne mantiene la persistenza, per recuperare le modifiche effettuate dall utente bisogna utilizzare il metodo: SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); boolean check = preferences.getboolean("checkbox_preference", false);
11 Le classi base per le preferenze e gli elementi del file XML a disposizione sono: Corso di programmazione di sistemi mobile 11
12 Corso di programmazione di sistemi mobile 12 Serializable Nel passaggio di dati complessi tra servizi, come ad esempio il passaggio di dati fra activity, nasce la necessità di serializzare i dati. Un oggetto si dice serializzato se è trasformabile in un array di byte e può essere ricostruito al suo stato originale. La serializzazione prevede la sola trasformazione dello stato dell oggetto e non della sua struttura, cioè della relativa classe. Quindi il bytecode relativo alla classe dovrà essere disponibile in entrambi i processi che si scambiano questo tipo di oggetti. Per serializzare un oggetto basta implementare l interfaccia java.io.serializable, inoltre tutti i membri devono essere di tipo serializzabile. public class Person implements Serializable { private int id; private About about;
13 Corso di programmazione di sistemi mobile 13 Parcelable Android mette a disposizione un altra struttura per serializzare i dati dal nome Parcelable. È stato creata questa alternativa perché il meccanismo adottato per comprimere un oggetto Serializable è più lento e se complesso può portare l applicazione ad errori di tipo ARN. A differenza di quanto avviene per una classe che implementa l interfaccia Serializable l utilizzo dell interfaccia Parcelable richiede più lavora da parte dello sviluppatore. L'interfaccia Parcelable descrive una modalità di registrazione di un oggetto con tutti i suoi dati primitivi o un qualsiasi oggetto che a sua volta implementa Parcelable. Il metodo da implementare è: public void writetoparcel(parcel parcel, int flags) Parcel parcel è l oggetto dove andremo a trasferire i dati della nostra classe int flags altre informazioni su come deve essere scritto l oggetto public int describecontents() questo metodo in genere ritorna zero, esso viene utilizzato in alcuni casi particolari.
14 Corso di programmazione di sistemi mobile 14 Sarà inoltre necessario definire un metodo statico chiamato CREATOR, che è un oggetto che implementa l'interfaccia Parcelable.Creator, tale oggetto serve a ricostruire la classe che implementa Parcelable. public class Person implements Parcelable { public static final Creator<Person> CREATOR = new Creator<Person>() public Person createfromparcel(parcel in) { return new Person(in); public Person[] newarray(int size) { return new Person[size]; private int id; protected Person(Parcel in) { id = public int describecontents() { return public void writetoparcel(parcel dest, int flags) { dest.writeint(id);
15 Corso di programmazione di sistemi mobile 15 Database All interno del framework Android sono presenti le API per utilizzare i Database, in particolare Android si avvale del database SQLite. SQLite è un leggerissimo database engine transazionale che occupa poco spazio in memoria e sul disco pertanto è la tecnologia perfetta in un ambiente mobile, dove le risorse sono limitate e dunque è importante ottimizzarne l utilizzo. SQLite supporta i principali tipi di dato (Integer, Real, Text) fatta eccezione per i booleani che vengono memorizzati come interi 0, 1. All interno di un applicazione mobile si possono avere infiniti database, essi vengono memorizzati all interno dello spazio di memoria riservato all applicazione nella sottodirectory chiamata databases, il cui percorso assoluto è: /data/data/packagename/databases dove "packagename" è il nome del package del corrispondete alla nostra applicazione.
16 Corso di programmazione di sistemi mobile 16 Per includere e gestire un database in una app Android è necessario creare: 1) La struttura del database tramite uno script SQL. 2) Una classe java che estende SQLiteOpenHelper per gestire la creazione e i vari aggiornamenti del DB, inoltre la classe deve poter recuperare un riferimento all oggetto SQLiteDatabase per accedere ai dati. 3) Una classe per l interazione con il database sfruttando il riferimento alla classe SQLiteOpenHelper e contenente metodi per eseguire le operazioni sui dati. Per creare la tabella sarà necessaria la creazione di una stringa contenente il comando, ad esempio: private static final String CREA_TABELLA_PERSONE = "CREATE TABLE " + TABELLA_PERSONE + " (" + ID + " INTEGER PRIMARY KEY," + PERSONE_NOME + " TEXT," + PERSONE_COGNOME + " TEXT," + PERSONE_FOTO + " TEXT)"; È utile creare anche delle stringhe per i comandi di update o di altre modifiche: private static final String SQL_DELETE_ENTRIES ="DROP TABLE IF EXISTS " + "Persone" ;
17 Corso di programmazione di sistemi mobile 17 SQLiteOpenHelper public class PersonDbHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "PersonDb.db"; private static final int DATABASE_VERSION = 1; private static final String TEXT_TYPE = " TEXT"; private static final String REAL_TYPE = " REAL"; private static final String INTEGER_TYPE = " INTEGER"; private static final String COMMA_SEP = ","; public static final String TABLE_NAME = "person"; public static final String _ID = "_id"; public static final String NOME = "nome"; public static final String COGNOME = "cognome"; public static final String FOTO = "foto"; private static final String TABLE_PERSON_CREATE = "CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY," + NOME + TEXT_TYPE + COMMA_SEP + COGNOME + TEXT_TYPE + COMMA_SEP + FOTO + TEXT_TYPE + " )";
18 Corso di programmazione di sistemi mobile 18 public PersonDbHelper(Context context) { super(context, DATABASE_NAME, null, public void oncreate(sqlitedatabase db) { public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { switch (newversion) { case 2: break; Il metodo oncreate viene invocato una sola volta per la creazione del DB e riceve come input un oggetto di tipo SQLiteDatabase il quale fornisce i metodi necessari ad effettuare le principali operazioni su un database. Si può ottenere un istanza di tale classe anche utilizzando altri due metodi presenti nella classe helper: getreadabledatabase() e getwritabledatabase(). Tali metodi permettono l accesso rispettivamente in lettura ed in scrittura al DB. Alla fine di ogni utilizzo dell istanza ottenuta è necessario rilasciare il database invocando il metodo close(). In alternativa a questo metodo si può usare releasereference().
19 Corso di programmazione di sistemi mobile 19 ExecSQL Nell oncreate del database si può notare che il comando SQL è inviato tramite l invocazione del metodo execsql. Tale metodo consente l esecuzione di qualsiasi comando SQL che non sia di tipo query (quindi che non preveda la restituzione di informazioni da parte del DB) e sono disponibili due overload. Il primo richiede semplicemente una stringa SQL da eseguire, l altro richiede di passare dei parametri per l esecuzione dei cosiddetti prepared statements: db.execsql("insert INTO nomi VALUES(?)", new Object[]{"Andrea"); La piattaforma ci offre comunque supporto nativo per le operazioni più comuni come delete, insert, update e query generiche.
20 Corso di programmazione di sistemi mobile 20 Principali Operazioni sul DB Query: si ottiene un oggetto Cursor che può essere usato per spostarsi tra le righe del risultato con i metodi movetonext, movetofirst, movetolast. Per ogni colonna si possono prelevare i valori tramite i metodi getstring, getlong tali metodi necessitano dell indice della colonna desiderata. Esistono due metodi per effettuare le query: 1. query(string table, String[] columns, String selection, String[] selectionargs, String groupby, String having, String orderby, String limit) 2. rawquery(string sql, String[] selectionargs) Delete: utilizzato per eliminare uno o più record data la tabella è necessario specificare la condizione e gli eventuali parametri per effettuare il bind ( concetto simile alla clausola WHERE). Ritorna il numero di record eliminati o errore (-1). Insert: per inserire un nuovo record, come valore di ritorno restituisce l ID della riga inserita o -1 in caso di errore. Update: per modificare dei record inseriti oppure delle righe.
21 Corso di programmazione di sistemi mobile 21 Query long itemid; SQLiteDatabase db = getwritabledatabase(); Cursor c = db.query( TABLE_NAME, // La tabella da interrogare projection, // Le colonne che si vogliono ottenere (String[]) selection, // le colonne della clausola WHERE selectionargs, // I valori per la clausola WHERE null, // null indica che non si vuole raggruppare le righe null, // nessun filtro per gruppi di righe sortorder // modalità di ordinamento (String) ); c.movetofirst(); itemid = c.getlong(cursor.getcolumnindexorthrow(_id)); db.close();
22 RawQuery public List<Persona> getpersone() { SQLiteDatabase db = getreadabledatabase(); Cursor cursor = db.rawquery("select * FROM " + TABLE_NAME, null); if (cursor == null!cursor.movetofirst()) return null; List<Persona> persone = new ArrayList<Persona>(cursor.getCount()); for (int i = 0; i < cursor.getcount(); i++) { String nome = cursor.getstring(cursor.getcolumnindex(nome)); String cognome = cursor.getstring(cursor.getcolumnindex(cognome)); String foto = cursor.getstring(cursor.getcolumnindex(foto)); long id = cursor.getlong(cursor.getcolumnindex(_id)); Persona persona = new Persona(); persona.setcognome(cognome); persona.setnome(nome); persona.setfoto(foto); persona.setid(id); persone.add(persona); cursor.movetonext(); db.close(); return persone; Corso di programmazione di sistemi mobile 22
23 Corso di programmazione di sistemi mobile 23 Inserimento Per inserire un oggetto all interno del database si utilizza il ContentValues che ci consente di inserire i dati tramite l assegnazione della rispettiva colonna del database. public int addnuovapersona(persona persona) { SQLiteDatabase db = getwritabledatabase(); ContentValues values = new ContentValues(); values.put(nome, persona.getnome()); values.put(cognome, persona.getcognome()); values.put(foto, persona.getfoto()); long result = db.insert(table_name, null, values); db.close(); return result;
24 Corso di programmazione di sistemi mobile 24 Eliminazione Il valore di ritorno indica il numero di record eliminati o -1 in caso di errore. public boolean deletepersona(long id) { SQLiteDatabase db = getwritabledatabase(); int result = db.delete(table_name, ID + "=?", new String[] { Long.toString(id) ); db.close(); return result>0;
25 Corso di programmazione di sistemi mobile 25 Aggiornamento public Persona updatepersona(persona persona) { SQLiteDatabase db = getwritabledatabase(); ContentValues values = new ContentValues(); values.put(nome, persona.getnome()); values.put(cognome, persona.getcognome()); values.put(foto, persona.getfoto()); int result = db.update(table_name, values, ID + "=?", new String[]{ Long.toString(persona.getId()) ); db.close(); return result>0;
External Storage File pubblici
Data Storage Shared Preferences dae privae, coppie chiave- valore 128 Internal Storage File privae External Storage File pubblici Database SQLite DaE struourae in database privae SharedPreferences 129
DettagliCorso Base. Lezione 6. Maurizio Cozzetto, Francesco Sarasini
Corso Base Lezione 6 Maurizio Cozzetto, Francesco Sarasini Database SQLite (1/2) Android provides full support for SQLite databases. Any databases you create will be accessible by name to any class in
DettagliSistemi Mobili e Wireless Android - Dati persistenti: SQLite
Sistemi Mobili e Wireless Android - Dati persistenti: SQLite Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Android offre
DettagliAndroid. Memorizzazione di dati
Android Memorizzazione di dati Introduzione In questa lezione vedremo quali sono i metodi principali messi a disposizione da una applicazione Android per memorizzare dei dati in maniera permanente e successivamente
DettagliProgrammazione Android A cura di Carlo Pelliccia. Lezione 12 Database
A cura di Carlo Pelliccia DBMS, ossia Management System, è un termine caro agli sviluppatori di applicazioni server-side e di impresa. La maggior parte delle applicazioni Web, ad esempio, si appoggiano
DettagliDBMS (Data Base Management System)
Cos'è un Database I database o banche dati o base dati sono collezioni di dati, tra loro correlati, utilizzati per rappresentare una porzione del mondo reale. Sono strutturati in modo tale da consentire
DettagliCorso di programmazione di sistemi mobile 1. Android. Google Cloud Messaging
Corso di programmazione di sistemi mobile 1 Android Google Cloud Messaging Corso di programmazione di sistemi mobile 2 Cos è Il Google Cloud Messaging o GCM è un servizio di Google che permette di inviare
DettagliMOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY
MOBILE WEB DESIGN TUTORIAL ANDROID METAIO AUGMENTED REALITY 1 Sommario 1. INTRODUZIONE... 3 2. GET METAIO... 4 2.1. PREREQUISITI... 4 2.2. INTALLAZIONE... 4 2.3. PROGETTI ESEMPLIFICATIVI... 4 3. USARE
DettagliTipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
DettagliLa gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.
DettagliAl giorno d oggi, i sistemi per la gestione di database
Introduzione Al giorno d oggi, i sistemi per la gestione di database implementano un linguaggio standard chiamato SQL (Structured Query Language). Fra le altre cose, il linguaggio SQL consente di prelevare,
DettagliSiti web centrati sui dati Architettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
DettagliRealizzazione di una classe con un associazione
Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe
DettagliGERARCHIE RICORSIVE - SQL SERVER 2008
GERARCHIE RICORSIVE - SQL SERVER 2008 DISPENSE http://dbgroup.unimo.it/sia/gerarchiericorsive/ L obiettivo è quello di realizzare la tabella di navigazione tramite una query ricorsiva utilizzando SQL SERVER
DettagliLezione 11 Accesso al file system
A cura di Carlo Pelliccia Qualunque applicazione Android può leggere e scrivere file dalla memoria interna del telefono o da una scheda esterna inserita nel dispositivo. I principi da osservare per compiere
DettagliBasi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL
Basi di dati Il Linguaggio SQL Data Definition Language (DDL) Data Definition Language: insieme di istruzioni utilizzate per modificare la struttura della base di dati Ne fanno parte le istruzioni di inserimento,
DettagliPer scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli
CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per
Dettagli19. LA PROGRAMMAZIONE LATO SERVER
19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici
DettagliArchitettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
Dettaglidall argomento argomento della malloc()
Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È
DettagliMySQL Database Management System
MySQL Database Management System http://www.mysql.com/ DATABASE RELAZIONALI Un database è una collezione strutturata di informazioni. I database sono delle strutture nelle quali è possibile memorizzare
DettagliIntroduzione ai database relazionali
Introduzione ai database relazionali Tabelle Un database (DB) è costituito da un insieme di file che memorizzano dati opportunamente organizzati Nei database relazionale tale organizzazione è costituita
DettagliEsercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:
Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R: Si consiglia di creare il data base, inserire i dati nelle tabelle, provare
DettagliSITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.
Progetto SITI Manuale Utente SITI-Reports ABACO S.r.l. ABACO S.r.l. C.so Umberto, 43 46100 Mantova (Italy) Tel +39 376 222181 Fax +39 376 222182 www.abacogroup.eu e-mail : info@abacogroup.eu 02/03/2010
DettagliCorso Corso di di programmazione di di sistemi mobile 1 1. Android Laboratorio. Primo Progetto, Toast
Corso Corso di di programmazione di di sistemi mobile 1 1 Android Laboratorio Primo Progetto, Toast Corso Corso di di programmazione di di sistemi mobile 2 2 Android Studio Per realizzare le nostre applicazioni
DettagliI file di dati. Unità didattica D1 1
I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità
DettagliAbilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere
Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report Facoltà di Lingue e Letterature Straniere Le QUERY 2 Che cos è una Query? Una Query rappresenta uno strumento per interrogare un database.
DettagliReflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010
Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Reflection in Java 1 Reflection Riflessione
DettagliIl linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.
(Structured Query Language) : Il linguaggio è di fatto lo standard tra i linguaggi per la gestione di data base relazionali. prima versione IBM alla fine degli anni '70 per un prototipo di ricerca (System
Dettagli20 - Input/Output su File
20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
DettagliUno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:
Javadoc Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: /* commenti */ // commenti /** commenti documentazione */ Questi ultimi generano automaticamente
DettagliLezione 13 Content Provider
A cura di Carlo Pelliccia Come si è visto nelle due lezioni precedenti, secondi i meccanismi di gestione della sicurezza di Android, sia i file che i database sono solitamente di esclusiva proprietà dell
DettagliUniversità di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record
DettagliRaggruppamenti Conti Movimenti
ESERCITAZIONE PIANO DEI CONTI Vogliamo creare un programma che ci permetta di gestire, in un DB, il Piano dei conti di un azienda. Nel corso della gestione d esercizio, si potranno registrare gli articoli
DettagliL ambiente di sviluppo Android Studio
L ambiente di sviluppo Android Studio Android Studio è un ambiente di sviluppo integrato (IDE, Integrated Development Environment) per la programmazione di app con Android. È un alternativa all utilizzo
DettagliScheda operativa Versione rif. 13.01.3c00. Libro Inventari
1 Inventario... 2 Prepara tabelle Inventario... 2 Gestione Inventario... 3 Tabella esistente... 3 Nuova tabella... 4 Stampa Inventario... 8 Procedure collegate... 11 Anagrafiche Archivi ditta Progressivi
DettagliSQL Server 2005. Introduzione all uso di SQL Server e utilizzo delle opzioni Olap. Dutto Riccardo - SQL Server 2005.
SQL Server 2005 Introduzione all uso di SQL Server e utilizzo delle opzioni Olap SQL Server 2005 SQL Server Management Studio Gestione dei server OLAP e OLTP Gestione Utenti Creazione e gestione DB SQL
DettagliCorso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.
DettagliAccess. P a r t e p r i m a
Access P a r t e p r i m a 1 Esempio di gestione di database con MS Access 2 Cosa è Access? Access e un DBMS che permette di progettare e utilizzare DB relazionali Un DB Access e basato sui concetti di
DettagliInformatica per le discipline umanistiche 2 lezione 10
Informatica per le discipline umanistiche 2 lezione 10 Parte III: il computer come strumento per l interazione e la comunicazione Si è parlato di identità Parte III: il computer come strumento per l interazione
DettagliAccess. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database
Microsoft Access Introduzione alle basi di dati Access E un programma di gestione di database (DBMS) Access offre: un supporto transazionale limitato Meccanismi di sicurezza, protezione di dati e gestione
Dettagli4. Un ambiente di sviluppo per Java
pag.15 4. Un ambiente di sviluppo per Java Esistono in commercio molti ambienti di sviluppo utilizzati dai programmatori Java, in particolare si tratta di editor complessi che mettono a disposizione tools
DettagliLe query. Lezione 6 a cura di Maria Novella Mosciatti
Lezione 6 a cura di Maria Novella Mosciatti Le query Le query sono oggetti del DB che consentono di visualizzare, modificare e analizzare i dati in modi diversi. Si possono utilizzare query come origine
DettagliLaboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013
Laboratorio Progettazione Web PHP e MySQL - Lezione 9 Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013 Architettura di una applicazione Web Browser Web HTTP Server Web API Dati Presentation
Dettagli12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
DettagliMANUALE D USO DELLA PIATTAFORMA ITCMS
MANUALE D USO DELLA PIATTAFORMA ITCMS MANULE D USO INDICE 1. INTRODUZIONE... 2 2. ACCEDERE ALLA GESTIONE DEI CONTENUTI... 3 3. GESTIONE DEI CONTENUTI DI TIPO TESTUALE... 4 3.1 Editor... 4 3.2 Import di
Dettagli. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi
Capitolo Terzo Primi passi con Microsoft Access Sommario: 1. Aprire e chiudere Microsoft Access. - 2. Aprire un database esistente. - 3. La barra multifunzione di Microsoft Access 2007. - 4. Creare e salvare
DettagliAutomatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione
Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento
DettagliCORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)
Ambiente Access La Guida di Access Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?) Guida in linea Guida rapida Assistente di Office indicazioni
DettagliCorso di Informatica Modulo T3 B2 - Database in rete
Corso di Informatica Modulo T3 B2 - Database in rete 1 Prerequisiti Programmazione web Applicazione web Modello OSI Architettura client/server Conoscenze generali sui database Tecnologia ADO in Visual
DettagliCapitolo 4 Pianificazione e Sviluppo di Web Part
Capitolo 4 Pianificazione e Sviluppo di Web Part Questo capitolo mostra come usare Microsoft Office XP Developer per personalizzare Microsoft SharePoint Portal Server 2001. Spiega come creare, aggiungere,
DettagliData Base. Master "Bio Info" Reti e Basi di Dati Lezione 6
Data Base 1 Sommario I concetti fondamentali. Database Relazionale.. Query e SQL MySql, Creazione di un db in MySQL con PHPmyAdmin Creazione database e delle Tabelle Query Inserimento Ricerca Modifica
DettagliMODULO 5 ACCESS Basi di dati. Lezione 4
MODULO 5 ACCESS Basi di dati Lezione 4 ARGOMENTI Lezione 4 Filtrare i dati Esempio 1 Query Cos è Creare Query in visualizza struttura Criteri di ricerca Esempio 2 Esempio 3 Esempio 4 Creare Query in creazione
DettagliUML Diagrammi delle classi. UML Diagramma classi 1
UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio
DettagliUniversità degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A. 2014 2015. Esercitazione 08 DAO e Hibernate
Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web L-A A.A. 2014 2015 Esercitazione 08 DAO e Hibernate Agenda Pattern DAO e framework Hibernate progetto d'esempio relativo alla gestione
DettagliPHP e Structured Query Language
Esercitazioni del corso di Tecnologie per la Comunicazione Aziendale PHP e Structured Query Language Marco Loregian loregian@disco.unimib.it www.siti.disco.unimib.it/didattica/tca2008 Interrogazioni (ripasso)
DettagliAppunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.
Appunti di MySql Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov. Indice generale avviare la shell mysql...2 comandi SQL per la gestione del database (DDL)...2 visualizzare l'elenco
DettagliARCHIVIAZIONE AUTOMATICA (Gestione Allegati)
M.I.Ba. Modulo Indagini Bancarie e Finanziarie Funzioni EXTRA Le Funzioni EXTRA nascono su indicazione dei nostri clienti e hanno come scopo far risparmiare più tempo possibile nella gestione delle indagini
DettagliRiccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino
Integration Services Project SQL Server 2005 Integration Services Permette di gestire tutti i processi di ETL Basato sui progetti di Business Intelligence di tipo Integration services Project SQL Server
DettagliSviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D - 2012
+ Sviluppo Applicazioni Mobile Lezione 12 JDBC + Cosa vediamo nella lezione di oggi Oggi analizzeremo insieme una specifica tecnologia Java per l accesso e la manipolazione di basi di dati relazionali
DettagliIntroduzione al Linguaggio C
Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C
DettagliInformatica Generale Andrea Corradini. 19 - Sistemi di Gestione delle Basi di Dati
Informatica Generale Andrea Corradini 19 - Sistemi di Gestione delle Basi di Dati Sommario Concetti base di Basi di Dati Il modello relazionale Relazioni e operazioni su relazioni Il linguaggio SQL Integrità
DettagliGESTIONE DEI PROCESSI
Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto
DettagliProgettazione : Design Pattern Creazionali
Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali
DettagliProgettazione di un Database
Progettazione di un Database Per comprendere il processo di progettazione di un Database deve essere chiaro il modo con cui vengono organizzati e quindi memorizzati i dati in un sistema di gestione di
DettagliEsercizio data base "Biblioteca"
Rocco Sergi Esercizio data base "Biblioteca" Database 2: Biblioteca Testo dell esercizio Si vuole realizzare una base dati per la gestione di una biblioteca. La base dati conterrà tutte le informazioni
DettagliDDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione
SQL DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE SQL è più di un semplice linguaggio di interrogazione! Linguaggio di definizione dati (Data-definition language, DDL):! Crea/distrugge/modifica relazioni
DettagliOSSIF WEB. Manuale query builder
OSSIF WEB Manuale query builder - Maggio 2010 1) Sommario 1) SOMMARIO... 2 INTRODUZIONE... 3 Scopo del documento... 3 Struttura del documento... 3 Descrizione dell interfaccia grafica... 3 SELEZIONE DI
DettagliLa struttura dati ad albero binario
La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,
DettagliAzioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati
Azioni Select e join non consentono di modificare il contenuto del DB Azioni desiderate Inserzione di nuovi dati Aggiornamento di dati Cancellazione di dati Aggiunta di un record insert into utenti(nome,tel,codice_u)
DettagliProgrammazione ad Oggetti Modulo A (Esame del 11/9/2015)
Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");
DettagliProcedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM
Procedure memorizzate SQL-2003/PSM Procedure memorizzate nel database Programmazione general-purpose Leggere sezione 8.2 di Garcia-Molina et al. Lucidi derivati da quelli di Jeffrey D. Ullman 1 Una estensione
DettagliNon si deve fare ALCUN riferimento alla parte specifica di JDBC.
Un applicazione per la quale sia fondamentale l indipendenza dal Database può essere scritta in Java usando le specifiche. (Package java.sql) Non devono essere usate chiamate specifiche del database: Si
DettagliTelerilevamento e GIS Prof. Ing. Giuseppe Mussumeci
Corso di Laurea Magistrale in Ingegneria per l Ambiente e il Territorio A.A. 2014-2015 Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci Strutture di dati: DB e DBMS DATO E INFORMAZIONE Dato: insieme
DettagliUtilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi
Vogliamo creare una struttura per permettere di memorizzari i voti della classe in tutte le materie Per fare questo untilizziamo tre tabelle Alunni,materie,voti Alunni Materie Voti Creo un record per ogni
DettagliAirone Gestione Rifiuti Funzioni di Esportazione e Importazione
Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Funzioni di Esportazione Importazione 1 Indice AIRONE GESTIONE RIFIUTI... 1 FUNZIONI DI ESPORTAZIONE E IMPORTAZIONE... 1 INDICE...
DettagliIl Web-Service SDMX dell ISTAT
Il Web-Service SDMX dell ISTAT Versione: 1.0.0 Data: 05/06/2014 Autore: Approvato da: Modifiche Versione Modifiche Autore Data Indice dei contenuti 1 Introduzione... 4 2 Creazione dell esempio d uso...
DettagliImporterOne Manuale Export Plugin Prestashop
ImporterOne Manuale Export Plugin Prestashop Indice generale 1 INTRODUZIONE...2 2 INSTALLAZIONE DEL PLUGIN...2 3 CONFIGURAZIONE...5 4 OPERAZIONI PRELIMINARI...11 1-10 1 INTRODUZIONE Questo plugin di esportazione
DettagliStudente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006
Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006 Si noti che le soluzioni ai quesiti saranno considerate
DettagliLa geolocalizzazione
La geolocalizzazione La maggior parte dei dispositivi mobili di ultima generazione è dotata di un antenna GPS che permette di conoscere, in breve tempo e con la precisione di qualche metro, la propria
DettagliIl software di gestione immobiliare più facile da usare. Modulo Web v5.2. www.gestim.it
Il software di gestione immobiliare più facile da usare Modulo Web v5.2 www.gestim.it Introduzione Il Modulo Web è un componente di Gestim che permette di pubblicare in automatico gli annunci sul sito
DettagliGestione del file system
Gestione del file system Gestione del file system Il gestore del file system è quella parte del sistema operativo incaricato di gestire le informazioni memorizzate sui dispositivi di memoria permanente
DettagliSistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione
IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza
DettagliUso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012
Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono
DettagliSOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE
SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software
DettagliEsercitazione n 4. Obiettivi
Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:
DettagliCorso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)
Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Introduzione a Java: primo programma, installazione dell ambiente di sviluppo, compilazione ed esecuzione 1 Introduzione Java è un linguaggio
DettagliLaboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014
Laboratorio Progettazione Web PHP e MySQL Andrea Marchetti IIT-CNR 2013/2014 Architettura di una applicazione Web Browser Web HTTP Server Web API Dati Presentation Application Storage PHP e DataBase Quando
DettagliEsercitazione PAM. (Php Apache MySQL)
Prerequisiti: Esercitazione PAM (Php Apache MySQL) Installazione del server Apache: avvenuta; Installazione del server Php: avvenuta; Sincronizzazione dei due server: avvenuta. Abstract: L esercitazione
DettagliIl Software. Il software del PC. Il BIOS
Il Software Il software del PC Il computer ha grandi potenzialità ma non può funzionare senza il software. Il software essenziale per fare funzionare il PC può essere diviso nelle seguenti componenti:
DettagliCos è ACCESS? E un programma di gestione di database (DBMS) Access offre: un ambiente user frendly da usare (ambiente grafico)
Cos è ACCESS? E un programma di gestione di database (DBMS) Access offre: un ambiente user frendly da usare (ambiente grafico) 1 Aprire Access Appare una finestra di dialogo Microsoft Access 2 Aprire un
DettagliIntroduzione JDBC interfaccia java.sql driver caricare i driver
J D B C DISPENSE Introduzione JDBC (Java Database Connectivity) è un interfaccia completamente Java utilizzata per eseguire istruzioni SQL sui database. L'API JDBC si trova nel pacchetto java.sql; contiene
DettagliSAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica
SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria
DettagliWeb Programming. Lezione 4: Cookie e Sessioni. Giulio Rossetti 14/04/2011. Guru@Work
Web Programming Lezione 4: Cookie e Sessioni Giulio Rossetti Guru@Work 14/04/2011 Contatti Materiale Tutto il materiale del corso sarà reso disponibile sul sito: www.guruatwork.com (e su blog.giuliorossetti.net)
DettagliMySQL Database Management System
MySQL Database Management System II parte Progetto gestione booking prenotazioni on-line 1. Progettazione e creazione struttura database che chiameremo booking. 2. Progettazione e creazione di un form
DettagliSistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory
FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File
DettagliLA GESTIONE DELLE VISITE CLIENTI VIA WEB
LA GESTIONE DELLE VISITE CLIENTI VIA WEB L applicazione realizzata ha lo scopo di consentire agli agenti l inserimento via web dei dati relativi alle visite effettuate alla clientela. I requisiti informatici
Dettagli13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliJDBC. A. Bechini 2004. Accesso a DataD con Java
JDBC Accesso a DataD atabase ase con Java Utilizzo di DB da applicazioni esterne Un DB contiene e gestisce dati, importanti per varie operazioni supportate da applicazioni software Come può un applicazione
DettagliEsercitazione sulle libpq - libreria C per PostgreSQL
Esercitazione sulle libpq - libreria C per PostgreSQL Roberto Tronci roberto.tronci@diee.unica.it Basi di Dati A.A. 2007/2008 Tronci ( roberto.tronci@diee.unica.it ) Esercitazione libpq Basi di Dati 2007/2008
Dettagli