sqlite是一个比较像h2的内存数据库,该有的基本功能都有,它是C实现的,比较适合C项目。支持事务,支持异步写,支持大多数SQL的轻量级DB,适合DB与应用程序同物理机、数据量不是很大、并发写不是很多的场景
这里集成到C项目使用该数据库,故选择sqlite-amalgamation-xx版本号.zip
。解压将里面的C源文件放到项目根下新建的db目录中,并修改CMakeLists.txt
,其中xx
为项目名
注意
- 这里修改一下Flie为指向项目根目录/db/xxdb.sqllite ,
xxdb.sqllite
可以不存在,之后首次连接后就会在此目录自动创建该数据库文件- 首次连接时需要配置数据库驱动,点击上图页面的“
Download missing driver files
” ,会从github下载一个sqllite-jdbc-3.39.2.0.jar
的驱动文件。如果自动安装有网络问题,可以手动去github的sqllite-jdbc驱动下载 然后参考下图配置该驱动文件即可
- 图像界面上创建表,如果不显示可能可能是"
manage shown schemas
"隐藏显示了
#include
#include "db/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() {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char *sql;
const char *data = "Callback function called";
// 使用sqlite官网下载文件中的sqlite3.c里定义的函数连接访问数据库“根目录/db/xxdb.sqllite”
rc = sqlite3_open("C:\\Users\\Administrator\\CLionProjects\\xx\\db\\xxdb.sqlite", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
} else {
fprintf(stderr, "Opened database successfully\n");
}
/* Create SQL statement */
sql = "SELECT * from test1";
/* 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;
}