使用Qt捕获SQL错误

时间:2014-08-10 03:54:47

标签: c++ sql qt

下面的代码不适用于使用Qt和sqlite捕获sql错误。我也试过isNull。我得到lasterror.text()的空白字符串,带有工作查询的错误号为-1。我不明白为什么isEmptyisNull无效。

if (!query.lastError().text().isEmpty())
   {
     logfile(sqlstatement);  
     logfile("SqLite error:" + query.lastError().text());
     logfile("SqLite error code:"+ QString::number( query.lastError().number() ));
  }

1 个答案:

答案 0 :(得分:1)

你真的execute your query吗?

看一下访问方式在OpenSource应用程序Mixxx(Opening databaseapplying 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;
}

并确保这有效:)