【问题标题】:Qt Threads and the default QSQLDatabase connection (sqlite)Qt 线程和默认的 QSQLDatabase 连接 (sqlite)
【发布时间】:2018-05-30 06:21:56
【问题描述】:

使用来自不同线程的默认数据库连接是否安全?像这样:

bool upSafe(const QString &mig_to, const QString &mig_from) const {
  if (!QSqlDatabase::database().transaction()) {
    qCCritical(hfCoreMT) << "Failed init database transaction";
    return false;
  }

  if (!up(mig_to, mig_from)) {
    QSqlDatabase::database().rollback();
    return false;
  }

  return QSqlDatabase::database().commit();
}

在函数up 默认创建并执行QSQLQuery。也许对正确模式的一些提示?

【问题讨论】:

  • “不同”是什么意思?
  • @eyllanesc 我应该将其解释为:“它应该是安全的,但直到 5.11 才出现错误”?
  • 您的示例显示了单线程使用情况。
  • @Michał Walenciak 的用法与其他线程类似

标签: qt sqlite qsqlquery qsqldatabase


【解决方案1】:

QSqlDatabase(代表一个 DB 连接)不可重入。您只能使用您创建的线程中的连接。如果您需要从另一个线程执行查询,您需要先从该线程创建另一个连接。

【讨论】:

  • 所以答案是“否”。默认连接和任何连接都应该只在已经打开的线程中使用。
猜你喜欢
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多