使用“C”执行 API 将 sqlite3 表导出到文件中

2024-02-09

我在 fedora 14 中使用 sqlite3 版本 3.6.23.1。我可以使用这样的命令提示符将表导出到文件中,

sqlite3 data.db

sqlite> .output sample.txt;

sqlite> select *from sample;

我想在应用程序级别处理这个案例。

我正在使用 sqlite3 开源“C”API 在应用程序级别执行此命令。

execute("delete from sample:);// working fine

execute(".output sample.txt"); //Not working

它的抛出错误称为"SQL error in sqlite3_exec: near ".": syntax error"

请建议我如何创建一个文件来使用此 API 导入数据。

API的函数定义。

int execute(const char* fmt, ...)
{

    char *err_messg;

    int ret = 0, result = 0;

    char sql_string[1024] = ""; //this honestly needs to be more elegant; will do for now

    va_list args;

    va_start(args, fmt);

    ret = vsprintf(sql_string, fmt, args);

    va_end(args);

    printf("sql_string: %s\n", sql_string);

    if (!ret)
        result = 0;
    else
        result = 1;

    if (result != -1)
    {

        if (sqlite3_exec(db_conn, sql_string, NULL, 0, &err_messg) == SQLITE_OK)    //Actual API which will work with database.
        {
            return SUCCESS;
        }
        else
        {
            printf("\n SQL error in sqlite3_exec: %s\n", err_messg);
            return DBEXCE_FAIL;
        }
    }
    return SUCCESS;
}

您使用的 SQLite API 调用仅接受 SQL:
“sqlite3_exec() 接口在作为第一个参数传入的数据库连接的上下文中运行零个或多个传入其第二个参数的 UTF-8 编码、分号分隔的 SQL 语句。” [来自http://www.sqlite.org/c3ref/exec.html]

如果浏览 SQLite 的源代码,您可以看到 .output 命令打开一个文件,然后使用 sqlite3_snprintf API 将查询结果的内容写入打开的文件句柄。

显示正在发生的情况的最新来源在这里:
http://www.sqlite.org/src/artifact/076e1c90d594644f36027c8ecff9a392cf2d3a06 http://www.sqlite.org/src/artifact/076e1c90d594644f36027c8ecff9a392cf2d3a06

.output 的相关部分是这样的:

if( c=='o' && strncmp(azArg[0], "output", n)==0 && nArg==2 ){
    if( p->outfile[0]=='|' ){
      pclose(p->out);
    }else{
      output_file_close(p->out);
    }
    p->outfile[0] = 0;
    if( azArg[1][0]=='|' ){
      p->out = popen(&azArg[1][1], "w");
      if( p->out==0 ){
        fprintf(stderr,"Error: cannot open pipe \"%s\"\n", &azArg[1][1]);
        p->out = stdout;
        rc = 1;
      }else{
        sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]);
      }
    }else{
      p->out = output_file_open(azArg[1]);
      if( p->out==0 ){
        if( strcmp(azArg[1],"off")!=0 ){
          fprintf(stderr,"Error: cannot write to \"%s\"\n", azArg[1]);
        }
        p->out = stdout;
        rc = 1;
      } else {
        sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", azArg[1]);
      }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“C”执行 API 将 sqlite3 表导出到文件中 的相关文章

随机推荐

  • 删除 SQL 表中的树节点

    我正在尝试编写一个递归过程 该过程将删除该节点及其所有子节点 如果它们在表中 我尝试执行以下操作 CREATE PROCEDURE DeleteFile FileID INTEGER UserID VARCHAR MAX AS DELETE
  • AG 网格 - 禁止在特定列/单元格内选择行

    使用 AG 网格 我需要制作一个在单击时选择行的表格 但是单击某些单元格不会导致选择该行 到目前为止 我最好的想法是当鼠标悬停在非选择单元格上时禁用单击行选择 就像是 gridOptions onCellMouseOver event gt
  • 命名空间“Mvc”的类型在命名空间“Microsoft.AspNet”中不存在

    我正在 Visual Studio 2015 中开发 MVC 项目 最初在 VS 2013 中创建 一切都构建正确 但在编码时 视图显示很多错误 ViewBag Title Index Layout Views Shared Layout
  • 如何使用批处理文件编辑特定的组策略

    我在一个学区的 700 多台计算机上工作 并编写了一个小程序 我打算将其写入 CD 该程序设置为插入磁盘时自动运行 并提示计算机的屏幕分辨率以及建筑物所在的计算机 不同的教学楼 然后 程序将运行一个批处理文件 将默认桌面从磁盘复制到 win
  • 在生产环境中部署 ReactJS 应用程序(使用 NodeJS 后端)

    我们的项目现已结束 我们只有两周的时间将项目归还给我们大学最后一年的学习 我们的老师告诉我们 现在开发阶段已经结束 我们必须将其部署到生产阶段 我们使用 ReactJS 作为前端 托管在 localhost 3000 使用 NodeJS 进
  • 对不同集合上匹配 id 的对象数组进行排序

    我有一个对象数组 array id 5 name Helen age 20 id 15 name Lucy age 30 id 7 name Carlos age 1 然后我有一个类似的数组 以不同的方式排序 arraySorted id
  • Google 云容器构建器并不总是从 bitbucket 触发

    我在 Google Cloud Container Builder 中设置了构建触发器 这些触发器设置为在特定分支上触发并使用存储库中的 cloudbuild yml 配置 大约在我将提交推送到这些分支的第一天 它触发了容器构建并成功完成
  • 使用 Go 将数据发送到 Datadog

    我使用 Go 收集数据并希望将其可视化 我选择了 Datadog 但没有找到 Go 用于向 Datadog 发送指标的示例或实时项目 但官方网站说支持Go 第一步是在运行应用程序的服务器上安装 DataDog 代理 https docs d
  • tableView didSelectRowAtIndexPath 在 iOS 7 上无法正常工作。为什么?

    首先我想说我只是提出这个问题 因为我想了解发生了什么 我在 Xcode5 上全新安装时打开了一个旧的 Xcode 项目 一个非常简单的项目 当我意识到它在 iOS 7 上不起作用时 为什么 不知道 我看到了一些其他问题 没有得到任何有用的答
  • Vue.js 组件不工作

    我似乎无法弄清楚如何使组件工作 如果没有该组件 它可以正常工作 注释代码 这是我的 HTML strong Total Price strong span span br strong CPC strong span span 这是我的 V
  • Snap:编译的拼接代码示例

    我想我前段时间确实问过类似的问题 但由于 API 不稳定 没有得到回答 所以我一直在等待0 13的过去 我不确定提出类似问题是否正确 解释的替代方案是什么runChildrenWith Text and mapSplices在编译的拼接世界
  • 为什么 Safari 或 Firefox 无法处理来自 MediaElementSource 的音频数据?

    Safari 或 Firefox 都无法处理来自MediaElementSource使用网络音频 API http jsbin com ImUmOXe 1 edit js output var audioContext audioProce
  • 需要 grunt@>=0.4.0 的对等点

    为什么我会收到以下错误 我的 grunt 版本是 gt v0 4 0 npm install grunt contrib concat save dev 未满足的对等依赖 grunt gt 0 4 0 错误信息 Projects Hartz
  • Kotlin 本机互操作链接器找不到框架

    我正在尝试在 Kotlin 多平台项目中使用 cocoapods 框架 所以我 将框架添加到 Pods 文件中 运行 pod install created def file added cinterop配置在build gradle gr
  • 不使用指针迭代 C 风格数组

    我正在学习指针算术 并且有一段代码在相当长的一段时间内给我带来了错误 任何帮助将不胜感激 我找不到它 int arr 1 2 3 4 5 for int i 0 i lt 5 i cout lt lt arr arr cout lt lt
  • 匹配标准 10 位电话号码的正则表达式

    我想为支持以下格式的标准美国电话号码编写正则表达式 其中 表示任意数字 到目前为止我想出了以下表达方式 1 9 d 2 d 3 d 4 d 3 s d 3 d 4 1 9 d 2 s d 3 s d 4 1 9 d 2 d 3 d 4 分别
  • 在Python中初始化固定大小的数组[重复]

    这个问题在这里已经有答案了 我想知道如何初始化一个数组 或列表 尚未填充值 以具有定义的大小 例如在 C 中 int x 5 declared without adding elements 我如何在 Python 中做到这一点 您可以使用
  • 给定组合时如何计算索引(字典顺序)

    我知道有一种算法允许给定数字组合 无重复 无顺序 计算字典顺序的索引 这对于我的应用程序加快速度非常有用 例如 combination 10 5 1 1 2 3 4 5 2 1 2 3 4 6 3 1 2 3 4 7 251 5 7 8 9
  • Ember 数据模型重新加载导致 {{each}} 中的项目被删除/插入回来 - 丢失当前状态

    我怎样才能防止itemView在迭代控制器时被删除并重新渲染回原位arrangedContent 如果观察到的模型的属性没有改变值 下面是使用博客文章的简短版本App Post作为示例模型 控制器 sortProperties create
  • 使用“C”执行 API 将 sqlite3 表导出到文件中

    我在 fedora 14 中使用 sqlite3 版本 3 6 23 1 我可以使用这样的命令提示符将表导出到文件中 sqlite3 data db sqlite gt output sample txt sqlite gt select