环境准备
- 环境为Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-213-generic x86_64)安装好sqlite库。
- 泰山派的SDK里面有关于sqlite的使用,可以以此为参考。
$ cd ./rv1126_rv1109_sdk/external/rkfacial/
$ ls | grep database
database.c
database.h
- 把这两个文件拷贝到工作目录,创建一系列必要文件和文件夹
$ tree ./
./
├── CMakeLists.txt
└── src
├── database.c
├── database.h
└── main.cpp
database.c 分析
从database.h可以得知,有几个公用函数
//备份函数
void database_bak(void);
//初始化函数
int database_init(void);
//退出函数
void database_exit(void);
//重置函数
void database_reset(void);
//插入函数
int database_insert(void *data, size_t size, const char *name, size_t n_size, int id, bool sync_flag, void *mask, size_t mask_size);
//统计函数
int database_record_count(void);
//查询函数
int database_get_data(void *dst, const int cnt, size_t d_size, size_t d_off,
size_t i_size, size_t i_off, int mask);
//查询name是否存在函数
bool database_is_name_exist(const char *name);
//查询id是否存在函数
bool database_is_id_exist(int id, char *name, size_t size);
//
int database_get_user_name_id(void);
//删除函数
void database_delete(int id, bool sync_flag);
先调用初始化和退出
#include<stdio.h>
#include<stdlib.h>
#include"database.h"
int main(int argc, char **argv)
{
int ret = -1;
//初始化数据库
ret = database_init();
//关闭数据库
database_exit();
return ret;
}
cmake文件
cmake_minimum_required(VERSION 2.8)
#project name
project(sqlite_test)
set(CMAKE_CXX_STANDARD 11) #设置c++标准
# ----------------------------------------------------------------------------
# SET THE COMPILER PATH
# ----------------------------------------------------------------------------
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# ----------------------------------------------------------------------------
# ADD SYMBOL TABLE FOR GDB
# ----------------------------------------------------------------------------
set(CMAKE_C_FLAGS_DEBUG "-g -O0")
set(CMAKE_BUILD_TYPE "Debug")
# ----------------------------------------------------------------------------
# set property to classify library kinds
# ----------------------------------------------------------------------------
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
#set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
##set extern libraries
#head file path
include_directories(
src
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#add executable file
add_executable(sqlite_test ${DIR_SRCS})
target_link_libraries(sqlite_test sqlite3)
cmake
sqlite_test/src$ cmake ../
编译
/sqlite_test/src$ make
Scanning dependencies of target sqlite_test
[ 33%] Building C object CMakeFiles/sqlite_test.dir/database.c.o
/home/magee/sqlite_test/src/database.c:41:10: fatal error: face_common.h: No such file or directory
#include "face_common.h"
^~~~~~~~~~~~~~~
提示face_common.h不存在
删除引用,再编译,提示DATABASE_PATH等未定义
添加定义并建立对应的文件夹
#define PRE_PATH "../oem"
#define BAK_PATH "../userdata"
#define DATABASE_PATH PRE_PATH "/face_data.db"
#define BAK_DATABASE_PATH BAK_PATH "/face_data.db"
#define NAME_LEN 256
#define USER_NAME "User"
sqlite_test/src$ mkdir ../oem
sqlite_test/src$ mkdir ../userdata
再编译成功
sqlite_test/src$ make
Scanning dependencies of target sqlite_test
[ 33%] Building C object CMakeFiles/sqlite_test.dir/database.c.o
[ 66%] Building CXX object CMakeFiles/sqlite_test.dir/main.cpp.o
[100%] Linking CXX executable sqlite_test
[100%] Built target sqlite_test
测试
sqlite_test/src$ ./sqlite_test
sqlite_test/src$ ls ../oem/
face_data.db
可见 face_data.db 这个数据库已经创建出来,各行数据也正常