如何从Qt获取sqlite错误代码

时间:2014-01-10 09:14:43

标签: c++ qt sqlite qt4

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

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

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

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

如何从Qt获得sqlite error codes

upd1:

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

1 个答案:

答案 0 :(得分: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 constructor用于将低级错误代码传递给它,作为您可以使用上述方法获得的最后一个参数。

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

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