├── .gitlab-ci.yml ├── Makefile ├── README.md ├── create.c ├── delete.c ├── insert.c ├── open.c ├── select.c └── update.c /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: debian:9-slim 2 | 3 | stages: 4 | - compile 5 | 6 | make: 7 | stage: compile 8 | script: 9 | - apt-get update -qy 10 | - apt-get install -y build-essential libsqlite3-dev 11 | - make 12 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CC = cc -std=c89 2 | SRCS = $(wildcard *.c) 3 | BINS = $(patsubst %.c, %, $(SRCS)) 4 | LIBS = -lsqlite3 5 | WFLAGS = -pedantic-errors -Wall -Wextra 6 | 7 | .PHONY: clean 8 | 9 | all: $(BINS) 10 | 11 | %: %.c 12 | $(CC) $(LIBS) $(WFLAGS) -o $@ $< 13 | 14 | clean: 15 | rm -f $(BINS) 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SQLite 3 examples in C 2 | 3 | From https://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm. 4 | 5 | ## Usage 6 | 7 | Install [SQLite](https://www.sqlite.org/index.html). 8 | 9 | ```sh 10 | git clone https://github.com/angristan/sqlite3-c-examples 11 | cd sqlite3-c-examples 12 | make 13 | ``` 14 | 15 | To get started, run `./create` and `./insert`. 16 | 17 | ## License 18 | 19 | MIT 20 | -------------------------------------------------------------------------------- /create.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | static int callback(void *NotUsed, int argc, char **argv, char **azColName) { 6 | int i; 7 | for(i = 0; i < argc; i++) { 8 | printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 9 | } 10 | printf("\n"); 11 | return 0; 12 | } 13 | 14 | int main(int argc, char* argv[]) { 15 | sqlite3 *db; 16 | char *zErrMsg = 0; 17 | int rc; 18 | char *sql; 19 | 20 | /* Open database */ 21 | rc = sqlite3_open("test.db", &db); 22 | 23 | if(rc) { 24 | fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 25 | return(0); 26 | } else { 27 | fprintf(stdout, "Opened database successfully\n"); 28 | } 29 | 30 | /* Create SQL statement */ 31 | sql = "CREATE TABLE COMPANY(" \ 32 | "ID INT PRIMARY KEY NOT NULL," \ 33 | "NAME TEXT NOT NULL," \ 34 | "AGE INT NOT NULL," \ 35 | "ADDRESS CHAR(50)," \ 36 | "SALARY REAL );"; 37 | 38 | /* Execute SQL statement */ 39 | rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); 40 | 41 | if(rc != SQLITE_OK){ 42 | fprintf(stderr, "SQL error: %s\n", zErrMsg); 43 | sqlite3_free(zErrMsg); 44 | } else { 45 | fprintf(stdout, "Table created successfully\n"); 46 | } 47 | sqlite3_close(db); 48 | return 0; 49 | } 50 | -------------------------------------------------------------------------------- /delete.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | static int callback(void *data, int argc, char **argv, char **azColName) { 6 | int i; 7 | fprintf(stderr, "%s: ", (const char*)data); 8 | 9 | for(i = 0; i < argc; i++) { 10 | printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 11 | } 12 | printf("\n"); 13 | return 0; 14 | } 15 | 16 | int main(int argc, char* argv[]) { 17 | sqlite3 *db; 18 | char *zErrMsg = 0; 19 | int rc; 20 | char *sql; 21 | const char* data = "Callback function called"; 22 | 23 | /* Open database */ 24 | rc = sqlite3_open("test.db", &db); 25 | 26 | if(rc) { 27 | fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 28 | return(0); 29 | } else { 30 | fprintf(stderr, "Opened database successfully\n"); 31 | } 32 | 33 | /* Create merged SQL statement */ 34 | sql = "DELETE from COMPANY where ID=2; " \ 35 | "SELECT * from COMPANY"; 36 | 37 | /* Execute SQL statement */ 38 | rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); 39 | 40 | if(rc != SQLITE_OK) { 41 | fprintf(stderr, "SQL error: %s\n", zErrMsg); 42 | sqlite3_free(zErrMsg); 43 | } else { 44 | fprintf(stdout, "Operation done successfully\n"); 45 | } 46 | sqlite3_close(db); 47 | return 0; 48 | } 49 | -------------------------------------------------------------------------------- /insert.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | static int callback(void *NotUsed, int argc, char **argv, char **azColName) { 6 | int i; 7 | for(i = 0; i 2 | #include 3 | 4 | int main(int argc, char* argv[]) { 5 | sqlite3 *db; 6 | char *zErrMsg = 0; 7 | int rc; 8 | 9 | rc = sqlite3_open("test.db", &db); 10 | 11 | if(rc) { 12 | fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 13 | return(0); 14 | } else { 15 | fprintf(stderr, "Opened database successfully\n"); 16 | } 17 | sqlite3_close(db); 18 | } 19 | -------------------------------------------------------------------------------- /select.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | static int callback(void *data, int argc, char **argv, char **azColName){ 6 | int i; 7 | fprintf(stderr, "%s: ", (const char*)data); 8 | 9 | for(i = 0; i 2 | #include 3 | #include 4 | 5 | static int callback(void *data, int argc, char **argv, char **azColName){ 6 | int i; 7 | fprintf(stderr, "%s: ", (const char*)data); 8 | 9 | for(i = 0; i