SQLite3数据库在嵌入式应用之四:如何导出数据库?给出代码示例

来源:互联网 发布:sql必知必会第四版pdf 编辑:程序博客网 时间:2024/06/06 18:32
     翻找SQLite的教程,也没有找到怎么用SQL语句将本地数据库导出来。网上搜了搜,最后发现只能用SQLite 二进制应用程序将数据库导出来。似乎都没有给出如何在代码里集成这个功能。下面详细说下,怎么将这个功能融合到你的代码里,让此功能形成一个接口函数。

1、在SQLite的交叉编译结果中,有个bin文件夹,其中有个二进制应用程序sqlite3,如下图所示:



2、将此sqlite3程序放入你的打包文件,设置环境变量指向这个bin

export PATH=/opt/run_my_app/sqlite3/bin:$PATH

将此句写到app启动脚本里,在初始化时设置好PATH环境变量,否则在代码中直接运行sqlite3是找不到的。

3、命令如何写?

sqlite3 database.db ".output test.csv" ".separator ," "select * from tableName" ".outpu stdout"

sqlite3可导出csv,  txt等格式,这里选择导出csv格式。

4、代码示例:
#define TABLE_NAME " TEST "#define EXPORT_FILE "sqlite3 -csv %s \"select ID, NAME, NO FROM "TABLE_NAME" \" > %s"void my_table_export(IN handle handle,                                  IN char *export_file_path){    obj_t *p_obj = handle;    char tmp[128] = {0};    FILE* cmdFile = NULL;    pthread_mutex_t *lock = NULL;    if (NULL == export_file_path        || NULL == p_obj)    {        printf("NULL pointer, error!");        return;    }    lock = &(p_obj->mux);    pthread_mutex_lock(lock);    snprintf(tmp, sizeof(tmp), EXPORT_FILE, p_obj->datebase_path, export_file_path);    cmdFile = popen(tmp, "r");    pclose(cmdFile);    pthread_mutex_unlock(lock);}



要点:1)用锁保护导出的数据;
            2)用popen;


完。
0 0