数据库的基本内容前面都已经说得差点儿相同了。接下看看如何在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 .", DB_NAME) ; exit(0) ; } else{ fprintf(stdout, "successfully open datebase. ") ; } 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 ", azColName[i], argv[i] ? argv[i] : "NULL"); } printf(" "); return 0; } bool connectDB() { ret = sqlite3_open(DB_NANE, &db); if( ret != SQLITE_OK){ fprintf(stderr, "Error open database: %s ", sqlite3_errmsg(db)); sqlite3_free(zErrMsg); return false; } fprintf(stdout, "Successfully opened database "); 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++编译的,请不吝赐教......