SQLite-C语言实战
文章目錄
- SQLite示例教程
- 使用SQLite創建數據庫
- 使用SQLite3創建一個數據表
- 在上述數據表中插入數據
- 數據的獲取
- UPDATE操作
- delate操作
SQLite示例教程
使用SQLite創建數據庫
*sqlite3_open(const char *filename, sqlite3 *ppDb)
如果 filename 參數是 NULL 或 ‘:memory:’,那么 sqlite3_open() 將會在 RAM 中創建一個內存數據庫,這只會在 session 的有效時間內持續。
如果文件名 filename 不為 NULL,那么 sqlite3_open() 將使用這個參數值嘗試打開數據庫文件。如果該名稱的文件不存在,sqlite3_open() 將創建一個新的命名為該名稱的數據庫文件并打開。
簡單的來說就是會打開一個數據庫文件,文件不存在就會創建一個對應名字的數據庫文件
*sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char *errmsg)
在這里,第一個參數 sqlite3 是打開的數據庫對象,sqlite_callback 是一個回調,data 作為其第一個參數,errmsg 將被返回用來獲取程序生成的任何錯誤。
sqlite3_exec() 程序解析并執行由 sql 參數所給的每個命令,直到字符串結束或者遇到錯誤為止
sqlite3_close(sqlite3*)
如果還有查詢沒有完成,sqlite3_close() 將返回 SQLITE_BUSY 禁止關閉的錯誤消息。
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h>int main(int argc, char* argv[]) {sqlite3 *db;char *zErrMsg = 0;int rc;//sqlite3_open 打開指定的數據庫文件,文件不存在就創建一個新的rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}sqlite3_close(db);return 0; } $ gcc creat_db.c -l sqlite3 $ ./a.out Opened database successfully $ ls a.out creat_db.c test.db使用SQLite3創建一個數據表
#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;/* Open database *///< 打開數據庫文件rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stdout, "Opened database successfully\n");}/* Create SQL statement *///< 建表語句定義/* 創建主鍵 */ //"ID INT PRIMARY KEY NOT NULL," sql = "CREATE TABLE COMPANY(" \"ID INT PRIMARY KEY NOT NULL," \"NAME TEXT NOT NULL," \"AGE INT NOT NULL," \"ADDRESS CHAR(50)," \"SALARY REAL );";/* Execute SQL statement *///< 返回程序生成的執行的任何返回rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Table created successfully\n");}sqlite3_close(db);return 0; } $ gcc creat_db_datebase.c -l sqlite3 $ ./a.out Opened database successfully Table created successfully數據庫內筒如下:
在上述數據表中插入數據
#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;/********************第一步,打開數據庫文件,獲取數據庫文件操作句柄*************************/rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/********************第二步、定義數據操作語句***********************/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 );";/********************第三步、執行建表語句建立數據表**********************/rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Records created successfully\n");}sqlite3_close(db);return 0; } $ ./a.out Opened database successfully Records created successfully數據的獲取
- 獲取數據中需要用到回調函數的使用
UPDATE操作
#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 = "Callback function called";/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/* Create merged SQL statement */sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " \"SELECT * from COMPANY";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0; }執行結果
$ gcc creat_db_update.c -l sqlite3 $ ./a.out Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 #原來是 2000Callback function called: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0Operation done successfullydelate操作
#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 = "Callback function called";/* Open database */rc = sqlite3_open("test.db", &db);if( rc ){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));exit(0);}else{fprintf(stderr, "Opened database successfully\n");}/* Create merged SQL statement */sql = "DELETE from COMPANY where ID=2; " \"SELECT * from COMPANY";/* Execute SQL statement */rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);if( rc != SQLITE_OK ){fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0; }執行結果
$ ./a.out Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0Operation done successfully總結
以上是生活随笔為你收集整理的SQLite-C语言实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: string和C语言字符串之间的相互转换
- 下一篇: 数据流技术在GPU和大数据处理中的应用