下面的代码不适用于使用 Qt 和 sqlite 捕获 sql 错误。我也尝试过 isNull
。我得到一个空字符串 lasterror.text()
和 -1 用于工作查询的错误号。我不明白为什么 isEmpty
或 isNull
不起作用。
if (!query.lastError().text().isEmpty())
{
logfile(sqlstatement);
logfile("SqLite error:" + query.lastError().text());
logfile("SqLite error code:"+ QString::number( query.lastError().number() ));
}
最佳答案
你真的吗execute your query ?
看看在 OpenSource 应用程序 Mixxx(Opening database,applying query)中访问 SQLite DB + 日志的方法:
...
#define LOG_FAILED_QUERY(query) qDebug() << __FILE__ << __LINE__ << "FAILED QUERY [" \
<< (query).executedQuery() << "]" << (query).lastError()
...
// Check if you have QSQLITE2/QSQLITE driver avaiable
qDebug() << "Available QtSQL drivers:" << QSqlDatabase::drivers();
m_db.setHostName(...);
m_db.setDatabaseName(...);
m_db.setUserName(...);
m_db.setPassword(...);
bool ok = m_db.open();
qDebug() << "DB status:" << m_db.databaseName() << "=" << ok;
if (m_db.lastError().isValid()) {
qDebug() << "Error loading database:" << m_db.lastError();
}
...
QSqlQuery query(m_database);
query.setForwardOnly(true);
query.prepare(queryString);
if (!query.exec()) {
LOG_FAILED_QUERY(query);
return;
}
并确保这有效:)
关于c++ - 使用 Qt 捕获 SQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225382/