如何从Qt获取sqlite错误代码

use*_*345 3 c++ sqlite qt qt4

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

QSqlDatabase db;
db = QsqlDatabase::addDatabase("QSQLITE");
Run Code Online (Sandbox Code Playgroud)

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

QSqlError(-1, "Driver not Loaded", "Driver not loaded")
Run Code Online (Sandbox Code Playgroud)

如何从Qt 获取sqlite错误代码

upd1:

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

lpa*_*app 5

您可以使用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构造函数用于传递低级错误代码,作为您可以使用上述方法获得的最后一个参数.

正如您所看到的,它并没有类似地处理所有低级错误,但其余部分有一个默认的开关案例.即使在后一种情况下,错误也会传递给构造函数.

您需要注意这一点,通常情况下,它无法确定确切的低级错误,在这种情况下,它将根据文档返回-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();
}
Run Code Online (Sandbox Code Playgroud)