SQLite C /C ++ Tutorial


Installasjon

Før vi begynner å bruke SQLite i våre C /C ++ programmer, må vi sørge for at vi har SQLite bibliotek satt opp på maskinen. Du kan sjekke SQLite Installasjon kapitlet å forstå installasjonsprosessen

C /C ++ Interface APIer

Følgende er viktige C &. C ++ /SQLite grensesnitt rutiner som kan være nok kravet til å arbeide med SQLite database fra C /C ++ program. Hvis du er ute etter en mer sofistikert program, så kan du se nærmere på SQLite offisielle dokumentasjonen
S.N.API &.; Description1 sqlite3_open (const char * filnavn, sqlite3 ** ppDb)

Denne rutinen åpner en tilkobling til en SQLite database fil og returnerer en database tilkobling objektet som skal brukes av andre SQLite rutiner.
< p> Hvis filnavn
argumentet er NULL eller ': minne:', sqlite3_open () vil skape en in-memory database i RAM som varer bare for varigheten av økten.

Hvis filnavnet ikke er NULL, sqlite3_open () forsøker å åpne databasefilen ved hjelp av sin verdi. Hvis ingen fil med det navnet finnes, sqlite3_open () vil åpne en ny databasefil med det navnet.
2 sqlite3_exec (sqlite3 *, const char * sql, sqlite_callback, void * data, røye ** errmsg)

Denne rutinen gir en rask og enkel måte å utføre SQL-kommandoer gitt av sql argument som kan bestå av mer enn én SQL kommando.

Her første argumentet sqlite3
er åpen databaseobjekt, sqlite_callback
er en samtale tilbake som data
er den første argument og errmsg skal returnere til fange opp eventuelle feil oppdratt av rutinen.

sqlite3_exec ( ) rutine analyserer og utfører hver kommando gitt i sql
argument til den når enden av strengen eller oppstår en feil.
3 sqlite3_close (sqlite3 *)

Dette rutine lukker en databasetilkobling tidligere åpnet av et kall til sqlite3_open (). Alle preparerte uttalelser i forbindelse med tilkoblingen skal være ferdigstilt før du lukker tilkoblingen.

Hvis noen spørsmål forbli som ikke er ferdigstilt, sqlite3_close () vil returnere SQLITE_BUSY med feilmeldingen Kan ikke lukke grunnet ufinaliserte uttalelser.

Koble til Database

Etter C kodesegmentet viser hvordan du kobler til en eksisterende database. Hvis databasen ikke eksisterer, så vil det bli opprettet, og til slutt et databaseobjekt vil bli returnert
#include <. Stdio.h > #include < sqlite3.h > int main (int argc, char * argv []) {sqlite3 * db; char * zErrMsg = 0; int rc; rc = sqlite3_open ("test.db", og db); if (rc) {fprintf (stderr, "Kan ikke åpne databasen:% s \\ n", sqlite3_errmsg (db)); exit (0); } else {fprintf (stderr, "Åpnet database vellykket \\ n"); } Sqlite3_close (db);}

Nå, la oss kompilere og kjøre over programmet til å lage vår database test.db
i gjeldende katalog. Du kan endre din vei som per kravet
. $ Gcc test.c -Jeg sqlite3 $. /A.outOpened database hell

Hvis du skal bruke C ++ kildekoden, så kan du kompilere koden som følger :
$ g ++ test.c -l sqlite3

Her er vi knytte vårt program med sqlite3 biblioteket for å gi nødvendige funksjoner til C-program. Dette vil skape en databasefil test.db i katalogen din og du vil ha resultatet noe som følger:
-rwxr-xr-x. 1 root root 7383 8 mai 02:06 a.out-rw-r - r--. 1 root root 323 8 mai 02:05 test.c-rw-r - r--. 1 root root 0 8 mai 02:06 test.db
Lag en tabell

Etter C-kode segmentet vil bli brukt til å opprette en tabell i tidligere opprettet database:
#include < stdio.h > #include < stdlib.h > #include < sqlite3.h > static int tilbakeringing (void * NotUsed, int argc, røye ** argv, røye ** azColName) {int i; for (i = 0; i < argc; i ++) {printf ("% s =% s \\ n", azColName [i], argv [i] argv [i]: "NULL"); } Printf ("\\ n"); returnere 0;} int main (int argc, char * argv []) {sqlite3 * db; char * zErrMsg = 0; int rc; char * sql; /* Åpne database * /rc = sqlite3_open ("test.db", og db); if (rc) {fprintf (stderr, "Kan ikke åpne databasen:% s \\ n", sqlite3_errmsg (db)); exit (0); } else {fprintf (stdout, "Åpnet database vellykket \\ n"); } /* Lag SQL-setning * /sql = "CREATE TABLE COMPANY (" \\ "ID INT PRIMARY KEY NOT NULL," \\ "NAME TEKST NOT NULL," \\ "AGE INT NOT NULL," \\ "ADRESSE CHAR (50), "\\" LØNN REAL); "; /* Utføre SQL-setning * /rc = sqlite3_exec (db, sql, tilbakeringing, 0, og zErrMsg); if (rc = SQLITE_OK!) {fprintf (stderr, "SQL-feil:% s \\ n", zErrMsg); sqlite3_free (zErrMsg); } else {fprintf (stdout, "Table opprettet \\ n"); } Sqlite3_close (db); returnere 0;}

Når programmet ovenfor er kompilert og henrettet, det vil skape COMPANY tabellen i test.db og sluttnotering av filen vil være som følger:
-rwxr-xr-x. 1 root root 9567 8 mai 02:31 a.out-rw-r - r--. 1 root root 1207 8 mai 02:31 test.c-rw-r - r--. 1 root root 3072 8 mai 02:31 test.db
Sett Operation

Etter C kodesegmentet viser hvordan vi kan opprette poster i selskapet vårt bord laget i eksempelet ovenfor:
#include < stdio .h > #include < stdlib.h > #include < sqlite3.h > static int tilbakeringing (void * NotUsed, int argc, røye ** argv, røye ** azColName) {int i; for (i = 0; i < argc; i ++) {printf ("% s =% s \\ n", azColName [i], argv [i] argv [i]: "NULL"); } Printf ("\\ n"); returnere 0;} int main (int argc, char * argv []) {sqlite3 * db; char * zErrMsg = 0; int rc; char * sql; /* Åpne database * /rc = sqlite3_open ("test.db", og db); if (rc) {fprintf (stderr, "Kan ikke åpne databasen:% s \\ n", sqlite3_errmsg (db)); exit (0); } else {fprintf (stderr, "Åpnet database vellykket \\ n"); } /* Lag SQL-setning * /sql = "INSERT INTO COMPANY (ID, navn, alder, adresse, LØNN)" \\ "VALUES (1, 'Paul', 32," California ", 20000.00);" \\ "INSERT INTO COMPANY (ID, navn, alder, adresse, lønn) "\\" verdier (2, 'Allen', 25 'Texas', 15000.00); "\\" INSERT INTO COMPANY (ID, navn, alder, adresse, LØNN) " \\ "VERDIER (3, 'Teddy', 23 'Norge', 20000.00);" \\ "INSERT INTO COMPANY (ID, navn, alder, adresse, LØNN)" \\ "VERDIER (4," Mark ", 25", Rich-Mond ", 65000.00);"; /* Utføre SQL-setning * /rc = sqlite3_exec (db, sql, tilbakeringing, 0, og zErrMsg); if (rc = SQLITE_OK!) {fprintf (stderr, "SQL-feil:% s \\ n", zErrMsg); sqlite3_free (zErrMsg); } else {fprintf (stdout, "Records opprettet \\ n"); } Sqlite3_close (db); returnere 0;}

Når programmet ovenfor er kompilert og henrettet, det vil skape gitt poster i COMPANY bordet og vil vise følgende to linjer:
åpen database successfullyRecords opprettet
Velg operasjon

Før vi går videre med selve eksempel for å hente poster, la meg gi en liten detalj om tilbakeringingsfunksjonen, som vi bruker i våre eksempler. Dette tilbakeringing gir en måte å oppnå resultater fra SELECT-setninger. Den har følgende erklæring: typedef int (* sqlite3_callback) (void *, /* Data levert i fjerde argument for sqlite3_exec () * /int, /* Antall kolonner i rad * /char **, /* En rekke strenger som representerer felt i raden * /char ** /* En tabell med strenger som representerer kolonnenavn * /);

Hvis over tilbakeringing er gitt i sqlite_exec () rutine som den tredje argument, SQLite vil kalle denne tilbakeringingsfunksjonen . for hver post behandles i hver SELECT-setning henrettet i SQL argument

Etter C kodesegmentet viser hvordan vi kan hente og vise poster fra vårt selskap bord opprettet i eksempelet ovenfor:
#include < stdio. h > #include < stdlib.h > #include < sqlite3.h > static int tilbakeringing (void * data, int argc, røye ** argv, røye ** 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"); returnere 0;} int main (int argc, char * argv []) {sqlite3 * db; char * zErrMsg = 0; int rc; char * sql; const char * data = "Tilbakering funksjon kalt"; /* Åpne database * /rc = sqlite3_open ("test.db", og db); if (rc) {fprintf (stderr, "Kan ikke åpne databasen:% s \\ n", sqlite3_errmsg (db)); exit (0); } else {fprintf (stderr, "Åpnet database vellykket \\ n"); } /* Lag SQL-setning * /sql = "SELECT * from COMPANY"; /* Utføre SQL-setning * /rc = sqlite3_exec (db, sql, tilbakeringing, (void *) data, og zErrMsg); if (rc = SQLITE_OK!) {fprintf (stderr, "SQL-feil:% s \\ n", zErrMsg); sqlite3_free (zErrMsg); } else {fprintf (stdout, "Operation gjort med hell \\ n"); } Sqlite3_close (db); returnere 0;}

Når programmet ovenfor er kompilert og henrettet, vil det produsere følgende resultat:
Åpnet database successfullyCallback funksjon som heter: ID = 1NAME = PaulAGE = 32ADDRESS = CaliforniaSALARY = 20000.0Callback funksjon som heter: ID = 2NAME = AllenAGE = 25ADDRESS = TexasSALARY = 15000.0Callback funksjon som heter: ID = 3NAME = TeddyAGE = 23ADDRESS = NorwaySALARY = 20000.0Callback funksjon som heter: ID = 4NAME = MarkAGE = 25ADDRESS = Rich-MondSALARY = 65000.0Operation gjort med hell
UPDATE Operation Anmeldelser

Etter C kodesegmentet viser hvordan vi kan bruke UPDATE statement å oppdatere posten og deretter hente og vise oppdaterte poster fra vårt selskap tabell:
#include < stdio.h > #include < stdlib.h > # inkluderer < sqlite3.h > static int tilbakeringing (void * data, int argc, røye ** argv, røye ** 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"); returnere 0;} int main (int argc, char * argv []) {sqlite3 * db; char * zErrMsg = 0; int rc; char * sql; const char * data = "Tilbakering funksjon kalt"; /* Åpne database * /rc = sqlite3_open ("test.db", og db); if (rc) {fprintf (stderr, "Kan ikke åpne databasen:% s \\ n", sqlite3_errmsg (db)); exit (0); } else {fprintf (stderr, "Åpnet database vellykket \\ n"); } /* Lag sammenslåtte SQL-setning * /sql = "UPDATE selskapet satt LØNN = 25000.00 hvor ID = 1;" \\ "SELECT * from COMPANY"; /* Utføre SQL-setning * /rc = sqlite3_exec (db, sql, tilbakeringing, (void *) data, og zErrMsg); if (rc = SQLITE_OK!) {fprintf (stderr, "SQL-feil:% s \\ n", zErrMsg); sqlite3_free (zErrMsg); } else {fprintf (stdout, "Operation gjort med hell \\ n"); } Sqlite3_close (db); returnere 0;}

Når programmet ovenfor er kompilert og henrettet, vil det produsere følgende resultat:
Åpnet database successfullyCallback funksjon som heter: ID = 1NAME = PaulAGE = 32ADDRESS = CaliforniaSALARY = 25000.0Callback funksjon som heter: ID = 2NAME = AllenAGE = 25ADDRESS = TexasSALARY = 15000.0Callback funksjon som heter: ID = 3NAME = TeddyAGE = 23ADDRESS = NorwaySALARY = 20000.0Callback funksjon som heter: ID = 4NAME = MarkAGE = 25ADDRESS = Rich-MondSALARY = 65000.0Operation gjort med hell
slettingen Anmeldelser

Etter C kodesegmentet viser hvordan vi kan bruke DELETE-setningen til å slette posten og deretter hente og vise resterende postene fra vårt selskap tabell:
#include < stdio.h > #include < stdlib.h > # inkluderer < sqlite3.h > static int tilbakeringing (void * data, int argc, røye ** argv, røye ** 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"); returnere 0;} int main (int argc, char * argv []) {sqlite3 * db; char * zErrMsg = 0; int rc; char * sql; const char * data = "Tilbakering funksjon kalt"; /* Åpne database * /rc = sqlite3_open ("test.db", og db); if (rc) {fprintf (stderr, "Kan ikke åpne databasen:% s \\ n", sqlite3_errmsg (db)); exit (0); } else {fprintf (stderr, "Åpnet database vellykket \\ n"); } /* Lag sammenslåtte SQL-setning * /sql = "SLETT fra selskap hvor ID = 2;" \\ "SELECT * from COMPANY"; /* Utføre SQL-setning * /rc = sqlite3_exec (db, sql, tilbakeringing, (void *) data, og zErrMsg); if (rc = SQLITE_OK!) {fprintf (stderr, "SQL-feil:% s \\ n", zErrMsg); sqlite3_free (zErrMsg); } else {fprintf (stdout, "Operation gjort med hell \\ n"); } Sqlite3_close (db); returnere 0;}

Når programmet ovenfor er kompilert og henrettet, vil det produsere følgende resultat:
Åpnet database successfullyCallback funksjon som heter: ID = 1NAME = PaulAGE = 32ADDRESS = CaliforniaSALARY = 20000.0Callback funksjon som heter: ID = 3NAME = TeddyAGE = 23ADDRESS = NorwaySALARY = 20000.0Callback funksjon som heter: ID = 4NAME = MarkAGE = 25ADDRESS = Rich-MondSALARY = 65000.0Operation gjort med suksess