使用 sqlite3 驱动程序在 QSqlQuery 中使用多个 sql 语句

2024-04-18

我有一个包含多个 SQL 语句的文件,我想用它们来初始化新的 sqlite3 数据库文件。显然,sqlite3 仅通过以下方式处理一个查询中的多个语句 sqlite3_exec()函数,以及not通过prepare/step/finalize功能。没关系,但我想直接使用 QtSQL api 而不是 c api。通过 QSqlQuery 加载同一初始值设定项文件仅执行第一个语句,就像直接使用 sqlite3 api 中的准备/步骤/终结函数一样。有没有办法让 QSqlQuery 运行多个查询,而不必为每个语句单独调用 query.exec() ?


正如 Qt 文档中明确指出的QSqlQuery::准备() http://doc.qt.io/qt-5/qsqlquery.html#prepare and QSqlQuery::exec() http://doc.qt.io/qt-5/qsqlquery.html#exec-1,

对于 SQLite,查询字符串一次只能包含一个语句。 如果给出多个语句,该函数将返回 false。

正如您已经猜到的,解决此限制的唯一已知解决方法是将所有 sql 语句用某个字符串分隔,拆分语句并在循环中执行每个语句。

请参阅以下示例代码(它使用“;”作为分隔符,并假设查询中未使用相同的字符。这缺乏通用性,因为您可能在 where/insert/update 语句的字符串文字中具有给定的字符):

QSqlDatabase database;
QSqlQuery query(database);
QFile scriptFile("/path/to/your/script.sql");
if (scriptFile.open(QIODevice::ReadOnly))
{
    // The SQLite driver executes only a single (the first) query in the QSqlQuery
    //  if the script contains more queries, it needs to be splitted.
    QStringList scriptQueries = QTextStream(&scriptFile).readAll().split(';');

    foreach (QString queryTxt, scriptQueries)
    {
        if (queryTxt.trimmed().isEmpty()) {
            continue;
        }
        if (!query.exec(queryTxt))
        {
            qFatal(QString("One of the query failed to execute."
                        " Error detail: " + query.lastError().text()).toLocal8Bit());
        }
        query.finish();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sqlite3 驱动程序在 QSqlQuery 中使用多个 sql 语句 的相关文章

随机推荐

  • UITableViewCell 选定行的文本颜色变化

    我有一个表格视图 我想知道如何更改所选行的文本颜色 例如 Red 我尝试通过这段代码 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndex
  • 如何在 Visual Studio 2015 中创建新分支?

    我在 Visual Studio 2015 中将 Git 与 Visual Studio Online 结合使用 并试图弄清楚如何创建分支 这是网上常见的答案 https msdn microsoft com en us library h
  • 由于地理位置邻近公式(商店定位器)而导致结果缺失

    好的 我已经断断续续地与这个问题斗争了大约 3 个月 因为我已经用尽了我遇到的所有地理邻近公式 但我距离获得正确的结果还差得很远 我认为是时候了寻求帮助 THE AIM 我正在设置一个相当基本的商店定位器实现 用户输入邮政编码并从预定义的搜
  • Vue.use() 抛出“无法读取未定义的属性‘use’”

    尝试1 main js import createApp from vue import store from store store import App from App vue Vue config productionTip fal
  • 对列表进行排序,使特定值位于顶部

    我有课Offer其中包含一个已归档的类别 我希望特定类别的所有优惠都显示在顶部 然后是其他所有优惠 我试过了 但没有效果 你有什么推荐的吗 Offers Offers OrderBy x gt x Category Corporate To
  • 迭代多级提升树

    我的树看起来像这样 Library L ID 1 Book B ID 1 Title Moby Dick Book B ID 2 Title Jurassic Park Library L ID 2 Book B ID 1 Title Ve
  • Android 为 FLAG_TRANSLUCENT 禁用 ActionBar 和 NavigationBar 的叠加

    如图所示 导航栏和状态栏重叠布局 我所做的只是 if Build VERSION SDK INT gt Build VERSION CODES KITKAT Window w getWindow w setFlags WindowManag
  • 结合 EditText 和 Button?

    在某些应用程序中 我看到 EditText 小部件与右侧的按钮结合在一起 例如Twitter 应用程序中的搜索字段 http 2 bp blogspot com GTM W5mVPTU S rmYdiUTCI AAAAAAAAAEE hIO
  • 使用 alembic 自动生成时忽略模型

    我正在尝试使用自动生成数据库的修订版本alembic 这样做时 我想忽略一些模型 它们具有当前版本的 MySQL 不支持的数据类型 这是我尝试过的方法 似乎工作正常 但我不确定这是最惯用的方法 inside alembic env py d
  • Eclipse RCP - 创建视图后立即添加侦听器

    问候 Stackoverflow 的同胞们 我正在开发 Eclipse RCP 应用程序 并且必须添加SelectionListener to the Project Explorer view创建后的那一刻 我意识到我无法在我的贡献插件的
  • Android:活动对话框/对话框意外消失

    我有一个申请TabActivity每次从引擎 NDK C 代码 收到回调时 我都会在其中显示一个对话框 我确保当应用程序处于恢复状态时显示对话框 收到引擎的回调后 我启动NetworkDownDialog活动 但这会导致对话框停留一秒钟然后
  • 如何将 NHibernate 与 System.Tuple 等不可变类型一起使用?

    我有一个复合映射使用System Tuple
  • 为什么LogCat充满了错误?

    我尝试让 Android 应用程序消除任何错误 我绝对确定 这些都不是我的错误 当然 可能会有不同的系统信息消息 但我将日志级别设置为 警告 之后我仍然看到很多字符串 它们同时填充日志窗口 举个例子 01 21 20 47 13 336 4
  • Ruby 中什么计算结果为 false?

    false and nil评估为false in Ruby 还要别的吗 请提供官方 权威参考文献的链接 2 0 0p247 001 gt if true puts TRUE else puts FALSE end TRUE 2 0 0p24
  • 如何实现xxx.domainname.com URL模式?

    考虑 blogspot com 的情况 域名只是一个 blogspot com 但假设我用 xxx 注册 那么我将拥有 xxx blogspot com 这里它不会是子域名 我可以闻到 但是它有些不同 如何实现这一点 在 j2ee Web
  • 如何比较 Python 中的版本号?

    我正在遍历一个包含鸡蛋的目录 将这些鸡蛋添加到sys path 如果目录中有同一个 egg 的两个版本 我只想添加最新的一个 我有一个正则表达式r P
  • 使用 React JS 和 Laravel 处理多个图像上传

    我想通过reactjs中的axios将多个图像上传到数据库 将数据从客户端发送到服务器端 并在服务器端使用laravel处理图像上传 我的问题是 每当我尝试在服务器端处理多个图像时 它都不起作用 这是我的代码 客户端 ReactJS 建设者
  • select.select() 没有捕获套接字上的异常条件?

    Python 2 7 Windows XP 我有一个向客户端发送消息的服务器 我使用 select 模块来检查套接字是否准备好接收 以及捕获异常情况 我的印象是 如果客户端关闭了套接字 select 会在异常条件套接字列表中返回所述套接字
  • Firefox 与 Chrome 的 iMacros 对比

    哪种浏览器更适合使用 iMacros 我更喜欢跑得更快的 也尝试解释一下 如果这只是一个快速答案 请发表评论 我发现使用 iMacros 的 Firefox 比 Chrome 快得多 我 90 的任务都使用 Chrome 但在做一些宏观任务
  • 使用 sqlite3 驱动程序在 QSqlQuery 中使用多个 sql 语句

    我有一个包含多个 SQL 语句的文件 我想用它们来初始化新的 sqlite3 数据库文件 显然 sqlite3 仅通过以下方式处理一个查询中的多个语句 sqlite3 exec 函数 以及not通过prepare step finalize