SQLite Esempi di utilizzo della libreria in programmi C Gaetano Anastasi Beatrice Miotti Lorenzo Guerriero Monica Pellegrinelli Massimiliano Sartor Giorgio Macauda SQLite: caratteristiche generali Libreria software che implementa un DBMS di tipo relazionale Non utilizzabile come processo stand-alone Integrabile in programmi C/C++ (ed altri) tramite API; Disponibile tramite comandi da shell. Un database creato con SQLite consiste di un solo file il cui formato è indipendente dalla piattaforma Rispetta le caratteristiche ACID delle transazioni Multipiattaforma SQLite: chi la usa? E tanti altri.... Programmi di esempio dell' utlizzo della libreria SQLite Operazioni implementate: creazione di una tabella inserimento di una tupla esecuzione di query di tipo "select all" cancellazione di una tupla Il database di riferimento contiene per semplicità una sola tabella chiamata Reservations. Essa memorizza la banda di rete che un ipotetico programma client vuole che venga riservata durante la comunicazione con il programma server. Ipotizziamo che il client possa comunicare con un solo server alla volta, mentre ciascun server può servire più di un client. BUILD: gcc selectAll.c -lsqlite3 -o selectAll SQLite - API C/C++ : Connessione Nel file .c deve essere inclusa la libreria SQLite al DB #include <sqlite3.h> Connessione al database: sqlite3_open(const char *db_name, sqlite3 **ppDb); db_name è una stringa contenente il nome del DB, ppDb è l'oggetto DB ritornato dalla funzione e utilizzabile in altre procedure. Esempio Connessione al DB sqlite3 *db; int rc; rc = sqlite3_open("test.db", &db); if( rc ){ printf("Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ printf("Opened database successfully\n"); } SQLite - API C/C++ : Esecuzione di una query Esecuzione di una query: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback, void *data, char **errmsg) sqlite3* db: oggetto DB già aperto; const char *sql: stringa contenente la query; sqlite_callback: funzione richiamata con void *data come primo argomento; char **errmsg: messaggio di errore ritornato in caso di fallimento della operazione. Esempio di esecuzione di una query char *sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL );"; int rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ printf("SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ printf("Table created successfully\n"); } SQLite - API C/C++ :Chiusura connessione al DB Chiusura della connessione al DB: sqlite3_close(sqlite3* db) della