如何从Qt获取sqlite错误代码

How can I get sqlite error code from Qt

本文关键字:sqlite 错误代码 获取 Qt      更新时间:2023-10-16

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

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

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

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

如何从Qt获取sqlite错误代码?

更新1:

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

使用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();
}