Qt Threads и соединение QSQLDatabase по умолчанию (sqlite)

Безопасно ли использовать подключение к базе данных по умолчанию из разных потоков? Как это:

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. Может быть, какие-то намеки на правильный шаблон?


person ephemerr    schedule 30.05.2018    source источник
comment
прочитайте это: code.qt.io/cgit/qt/qtbase.git/tree/dist/changes-5.11.0/   -  person eyllanesc    schedule 30.05.2018
comment
Что вы имеете в виду под «другим»?   -  person Michał Walenciak    schedule 30.05.2018
comment
@eyllanesc следует интерпретировать так: это должно быть безопасно, но до 5.11 была ошибка?   -  person ephemerr    schedule 30.05.2018
comment
В вашем примере показано использование одного потока.   -  person Michał Walenciak    schedule 30.05.2018
comment
Использование @Michał Walenciak аналогично для других тем.   -  person ephemerr    schedule 30.05.2018


Ответы (1)


QSqlDatabase (представляющая одно соединение с БД) не является реентерабельной. Вы можете использовать соединение только из созданного вами потока. Если вам нужно выполнять запросы из другого потока, вам нужно сначала создать другое соединение из этого потока.

person peppe    schedule 30.05.2018
comment
Таким образом, ответ: Нет. Соединение по умолчанию, так как любое соединение должно использоваться только в том потоке, в котором оно было открыто. - person ephemerr; 01.06.2018