【问题标题】:How can I get sqlite error code from Qt如何从 Qt 获取 sqlite 错误代码
【发布时间】:2023-03-22 19:30:02
【问题描述】:

我在我的 Qt 程序中使用 sqlite 数据库。

QSqlDatabase db;
db = QsqlDatabase::addDatabase("QSQLITE");

当我无法从 sqlite db.lastError() 函数获取数据时,总是返回相同的东西

QSqlError(-1, "Driver not Loaded", "Driver not loaded")

我如何从 Qt 获得sqlite error codes

更新1:

QSqlQuery query;
query.exec(QString("select NAME from PEOPLE where AGE=%1").arg(age));
if(query.next())
{
}
else
{
    //check for sqlite error
}

【问题讨论】:

  • 何时何处检查错误?你能显示更多的代码吗?另外,在“添加”数据库之后,您是否检查过isValid 返回true
  • @Joachim Pileborg 我检查isValid 返回true
  • @LaszloPapp 它总是返回 -1

标签: c++ qt sqlite qt4


【解决方案1】:

使用 Qt API 本身可以做的最好的事情是以下方法:

int QSqlError::number() const

返回特定于数据库的错误号,如果无法确定,则返回 -1。

查看驱动程序代码库本身如何处理来自 sqlite 的错误代码:

https://qt.gitorious.org/qt/qtbase/source/eb5c0f4b1266702c016b032e281bb92a3a642da6:src/sql/drivers/sqlite/qsql_sqlite.cpp#L324

您可以看到相应的QSqlError constructor 用于将低级错误代码作为最后一个参数传递给它,您可以通过上述方法获得。

如您所见,它并没有类似地处理所有低级错误,但其中有一个默认的 switch case 用于其余部分。即使在后一种情况下,错误也会传递给构造函数。

您需要注意,通常情况下,它无法确定确切的低级错误,在这种情况下,它会根据文档返回 -1。

将其付诸实践,您将编写如下内容:

QSqlQuery query;
query.exec(QString("select NAME from PEOPLE where AGE=%1").arg(age));
if (query.next())
{
} else {
    qDebug() << "SqLite error:" << query.lastError().text() << ", SqLite error code:" << query.lastError().number();
}

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 2013-10-17
    • 2018-07-28
    • 2018-11-16
    • 2020-09-18
    • 2012-09-04
    • 2017-10-12
    • 2021-09-06
    相关资源
    最近更新 更多