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

     翻找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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite是一种嵌入式数据库引擎,可以通过使用SQLite提供的API来执行数据库操作命令。其中,sqlite3_exec是一个常用的函数,用于执行SQL命令。它的原型如下:sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback, void *data, char **errmsg)。\[1\] 要创建一个SQLite数据库文件,可以使用以下命令:sqlite3 testDB.db。这将在当前目录下创建一个名为testDB.db的数据库文件,该文件将被SQLite引擎用作数据库。创建成功后,您将看到一个sqlite>提示符。\[2\] 以下是一个使用SQLite API进行数据库操作的示例代码: #include <stdio.h> #include <sqlite3.h> int main(int argc, char* argv\[\]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } // 在这里可以执行其他数据库操作命令 sqlite3_close(db); } 在上述示例代码中,sqlite3_open函数用于打开名为test.db的数据库文件。如果打开失败,将打印错误信息。如果打开成功,将打印"Opened database successfully"。在打开数据库后,您可以在注释部分执行其他数据库操作命令。最后,使用sqlite3_close函数关闭数据库连接。\[3\] 请注意,上述示例代码只是一个简单的示例,您可以根据具体需求使用SQLite提供的其他API函数来执行更复杂的数据库操作。 #### 引用[.reference_title] - *1* *2* *3* [sqlite3 常用命令](https://blog.csdn.net/yuezhilangniao/article/details/124898271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值