c++ - 使用 Qt 捕获 SQL 错误

标签 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() ));
  }

最佳答案

你真的吗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;
}

并确保这有效:)

关于c++ - 使用 Qt 捕获 SQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225382/

相关文章:

php - MySQL 子查询重用

windows - 在 Windows 中从命令行编译 Qt 应用程序

linux - setObjectName 未在 Qt 中设置线程名称

c++ - 如何将命令行插入 GUI 应用程序

c++ - 递归C++的int递增值的运行时错误

c++ - [conv]/6中语句 "The expression e is used as a glvalue if and only if the initialization uses it as a glvalue"的确切含义是什么

c++ - 命令使用 shell 运行但卡在 QProcess 中

sql - 我的 Postgres 插入或更新查询出了什么问题

sql - Azure SQL : can’t ping the Private Endpoint from on-prem

c++ - 这是 operator<</>> 的正确实现吗?