SQLite - API C/C++ : Esecuzione di una query

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