【问题标题】:How to access low-level sqlite3 handle from QSqlDatabase?如何从 QSqlDatabase 访问低级 sqlite3 句柄?
【发布时间】:2015-10-23 20:00:36
【问题描述】:

是否可以使用 QSQLite 驱动程序从打开的 QSqlDatabase 中获取低级 sqlite3* 句柄?

我需要在上面调用一些低级的 sqlite3 函数,以便安装自定义 SQL 函数。

更新:找到解决方案:

Q_DECLARE_METATYPE(sqlite3*)

sqlite* sqlite_handle = database.driver()->handle().value<sqlite3*>();

【问题讨论】:

  • Ehm,您的解决方案正是我所回答的?

标签: qt sqlite


【解决方案1】:

在我的情况下(qt5,sqlite3)你必须这样做。如果不包含Q_DECLARE_OPAQUE_POINTER(),则会出现错误。

Q_DECLARE_OPAQUE_POINTER(sqlite3*)
Q_DECLARE_METATYPE(sqlite3*)

sqlite* sqlite_handle = database.driver()->handle().value<sqlite3*>();

【讨论】:

    【解决方案2】:

    QSqlDriver 有一个handle() method,它将返回包装在 QVariant 中的低级数据库句柄。你可以得到这个驱动via your QSqlDatabase。

    【讨论】:

      【解决方案3】:

      这是另一个来源,它似乎回答了在提取 sqlite3 指针后尝试执行时遇到的一些陷阱。 http://www.qtcentre.org/threads/36131-Attempting-to-use-Sqlite-backup-api-from-driver-handle-fails

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多