English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questa sezione, imparerai come utilizzare SQLite nei programmi C / C ++.
Prima di iniziare a utilizzare SQLite nei nostri programmi C / C ++, devi assicurarti che la libreria SQLite sia stata configurata sul computer. Puoi consultare la sezione "Installazione SQLite" per informazioni sul processo di installazione.
Di seguito sono riportati esempi importanti di interfacce C / C ++ SQLite, che sono sufficienti a soddisfare le tue esigenze di utilizzo del database SQLite nei programmi C / C ++. Se stai cercando applicazioni più complesse, puoi consultare la documentazione ufficiale di SQLite.
Numero di serie | API e spiegazione |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb) Questa routine apre una connessione con il file di database SQLite e restituisce un oggetto di connessione al database, che può essere utilizzato da altre routine SQLite. SefilenameSe il parametro è NULL o ':memory:', sqlite3_open() creerà un database in RAM, che esisterà solo durante la sessione. Se il nome del file non è NULL, sqlite3_open() tenta di aprire il file di database utilizzando il suo valore. Se non esiste un file con quel nome, sqlite3_open() aprirà un nuovo file di database con quel nome. |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) Questa routine fornisce un metodo rapido e semplice per eseguire comandi SQL forniti da parametri SQL, che possono consistere in più comandi SQL. In questo caso, il primo parametrosqlite3È un oggetto database aperto,sqlite_callbackÈ una callback, la qualeDatiÈ il primo parametro e restituisce errmsg per catturare eventuali errori sollevati dall'esercizio. L'esercizio sqlite3_exec() analizza ed eseguesqlOgni comando fornito nei parametri, fino alla fine della stringa o alla presenza di un errore. |
3 | sqlite3_close(sqlite3*) Questa routine chiude la connessione al database precedentemente aperta tramite sqlite3_open(). Tutte le statement preparate associate alla connessione devono essere completate prima di chiudere la connessione. Se ci sono query non completate, sqlite3_close() restituirà SQLITE_BUSY, l'errore non può essere chiuso a causa di statement non completati. |
Il seguente segmento di codice C mostra come connettersi a un database esistente. Se il database non esiste, verrà creato e infine restituito un oggetto database.
#include <stdio.h> #include <sqlite3.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Impossibile aprire il database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database aperto con successo\n"); } sqlite3_close(db); }
Ora, compiliamo e eseguiamo il programma sopra menzionato pertest.dbCrea un database nella directory corrente. Puoi modificare il percorso secondo necessità.
$gcc test.c -l sqlite3 $./a.out Database aperto con successo
Se si desidera compilare il codice sorgente in C++, si può seguire il seguente metodo per compilare il codice-
$g++ test.c -l sqlite3
In questo caso, collegiamo la libreria sqlite3 al programma per fornire le funzionalità necessarie al programma C. Questo creerà un file di database test.db nel tuo directory e otterrai i seguenti risultati.
-rwxr-xr-x. 1 root root 7383 Mag 8 02:06 a.out -rw-r--r--. 1 root root 323 Mag 8 02:05 test.c -rw-r--r--. 1 root root 0 Mag 8 02:06 test.db
Il seguente segmento di codice C verrà utilizzato per creare una tabella nel database creato in precedenza-
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Apertura del database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Impossibile aprire il database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stdout, "Database aperta con successo\n"); } /* Creazione di una frase SQL */ sql = "CREATE TABLE COMPANY(" "ID INT PRIMARIA CHIAVE NON NULL," "NAME \tTEXT \tNOT NULL," \ "AGE \tINT \tNOT NULL," \ "ADDRESS \tCHAR(50)," \ "SALARY \tREAL );" /* Eseguire la query SQL */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "Errore SQL: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "\nTabella creata con successo\n"); } sqlite3_close(db); return 0; }
Dopo aver compilato ed eseguito il programma sopra, creerà la tabella COMPANY in test.db, l'elenco finale dei file è come segue -
-rwxr-xr-x. 1 root root 9567 Mag 8 02:31 a.out -rw-r--r--. 1 root root 1207 Mag 8 02:31 test.c -rw-r--r--. 1 root root 3072 Mag 8 02:31 test.db
Il seguente segmento di codice C mostra come creare record nella tabella COMPANY creata negli esempi precedenti -
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Apertura del database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Impossibile aprire il database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database aperto con successo\n"); } /* Creazione di una frase SQL */ sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); \" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );" /* Esecuzione dello statement SQL */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "Errore SQL: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "\nOperazione completata con successo"); } sqlite3_close(db); return 0; }
Compilando ed eseguendo il programma sopra riportato, esso creerà la registrazione fornita nella tabella COMPANY e mostrerà le seguenti due righe-
Database aperto con successo La registrazione è stata creata con successo
Prima di continuare con l'esempio reale per ottenere i record, diamo un'occhiata a alcune dettagli riguardanti la funzione di callback utilizzata nell'esempio. La callback fornisce un metodo per ottenere i risultati della SELECT frase. Ha la seguente dichiarazione-
typedef int (*sqlite3_callback)( void* /* Dati forniti nel quarto argomento di sqlite3_exec() */ int /* Numero di colonne nella riga */ char**, /* String array che rappresenta gli elementi della riga */ char** /* String array che rappresenta i nomi delle colonne */ );
Se la callback menzionata sopra viene fornita come terzo argomento nella routine sqlite_exec(), SQLite chiamerà questa funzione di callback per ogni record gestito da ogni SELECT frase eseguita all'interno dei parametri SQL.
Il seguente segmento di codice C mostra come ottenere e visualizzare i record dalla tabella COMPANY creata nell'esempio precedente-
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Chiamata alla funzione di callback"; /* Apertura del database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Impossibile aprire il database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database aperto con successo\n"); } /* Creazione di una frase SQL */ sql = "SELECT * from COMPANY"; /* Esecuzione dello statement SQL */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "Errore SQL: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operazione completata con successo\n"); } sqlite3_close(db); return 0; }
Dopo la compilazione ed esecuzione del programma sopra riportato, verranno generati i seguenti risultati.
Database aperto con successo Chiamata alla funzione di callback: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 La funzione di callback chiamata: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 Chiamata della funzione di callback: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Chiamata della funzione di callback: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operazione completata con successo
Il seguente segmento di codice C mostra come utilizzare la frase UPDATE per aggiornare qualsiasi record e quindi ottenere e visualizzare i record aggiornati dalla tabella COMPANY.
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Chiamata alla funzione di callback"; /* Apertura del database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Impossibile aprire il database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database aperto con successo\n"); } /* Creazione di una frase SQL combinata */ sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;" \ "SELECT * from COMPANY"; /* Esecuzione dello statement SQL */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "Errore SQL: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operazione completata con successo\n"); } sqlite3_close(db); return 0; }
Dopo la compilazione ed esecuzione del programma sopra riportato, verranno generati i seguenti risultati.
Database aperto con successo Chiamata alla funzione di callback: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 La funzione di callback chiamata: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 Chiamata della funzione di callback: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Chiamata della funzione di callback: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operazione completata con successo
Il seguente segmento di codice C mostra come utilizzare la frase DELETE per eliminare qualsiasi record e quindi ottenere e visualizzare il resto dei record dalla tabella COMPANY.
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName) {}} int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Chiamata alla funzione di callback"; /* Apertura del database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Impossibile aprire il database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Database aperto con successo\n"); } /* Creazione dello statement SQL combinato */ sql = "DELETE from COMPANY where ID=2; \" "SELECT * from COMPANY"; /* Esecuzione dello statement SQL */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "Errore SQL: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operazione completata con successo\n"); } sqlite3_close(db); return 0; }
Dopo la compilazione ed esecuzione del programma sopra riportato, verranno generati i seguenti risultati.
Database aperto con successo Chiamata alla funzione di callback: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 Chiamata della funzione di callback: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Chiamata della funzione di callback: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operazione completata con successo