sqlite學習筆記7:C語言中使用sqlite之打開數據庫
阿新 • • 發佈:2017-05-24
實例 clas details code 返回 pri san filename stdlib.h
打開數據庫,假設數據庫不存在則新建一個數據庫,並打開
關閉數據庫。假設關閉之前還存在沒有運行完的語句,將會返回SQLITE_BUSY
假設下載配置安裝了sqlite,則須要將上面的頭文件包括改為:
然後運行命令:
既能夠看到結果。
數據庫的基本內容前面都已經說得差點兒相同了。接下看看如何在C語言中使用sqlite。
一 接口
sqlite3_open(const char *filename, sqlite3 **ppDb)
打開數據庫,假設數據庫不存在則新建一個數據庫,並打開
sqlite3_close(sqlite3*)
關閉數據庫。假設關閉之前還存在沒有運行完的語句,將會返回SQLITE_BUSY
二 實例
1 文件夾結構
Projects{
main.c// 代碼所在文件
sqlite{// 官網下載下來的sqlite壓縮包解壓之後的文件文件夾
shell.c// 本文件在項目中實際上是用不上的。這個文件是用來生成sqlite命令工具的,詳細能夠參考:sqlite學習筆記1
sqlite3.c
sqlite3.h
sqlite3ext.h
}
}
2 源碼
// main.c #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NAME "hanfeng.db" int main() { sqlite3* db = NULL ; char* msg = NULL ; int ret = 0 ; ret = sqlite3_open(DB_NAME, &db); if (ret){ fprintf(stderr, "error open datebase:%s\n.", DB_NAME) ; exit(0) ; } else{ fprintf(stdout, "successfully open datebase.\n") ; } sqlite3_close(db) ; return 0; }
為了今後擴展方便,現將代碼改動例如以下:
#include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; int ret = 0; typedef enum{ false, true } bool; static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i = 0; for(i=0; i < argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } bool connectDB() { ret = sqlite3_open(DB_NANE, &db); if( ret != SQLITE_OK){ fprintf(stderr, "Error open database: %s\n", sqlite3_errmsg(db)); sqlite3_free(zErrMsg); return false; } fprintf(stdout, "Successfully opened database\n"); return true; } bool closeDB() { int ret = 0; ret = sqlite3_close(db); if ( ret == SQLITE_BUSY ){ return false; } return true; } int main(int argc, char* argv[]) { connectDB(); closeDB(); return 0; }
執行有兩種方式,基於前面的筆記。我們並沒有配置sqlite的環境。不過下載解壓得到列一個目錄sqlite,因此。須要用例如以下命令:
gcc -o main main.c ./sqlite/sqlite3.c -lpthread -ldl
假設下載配置安裝了sqlite,則須要將上面的頭文件包括改為:
#include <sqlite3.h>
然後運行命令:
gcc -o main main.c -lsqlite3
./main
既能夠看到結果。
#在編譯時使用g++會報錯: error: invalid conversion from ‘const void*’ to ‘const char*’
g++貌似對類型轉換要求更為嚴格,不支持這種轉換。
路過的大俠,知道如何用g++編譯的,請不吝賜教......
sqlite學習筆記7:C語言中使用sqlite之打開數據庫