Я пытаюсь запустить следующую строку:
"ALTER TABLE flocksStartWeight RENAME TO flocksStartWeight_old"
Где flocksStartWeight - пустая таблица sqlite (3.15.2). Когда я запускаю это в браузере sqlite db, он переименовывается нормально, но когда я пытаюсь запустить его из своего приложения qt, происходит сбой с предупреждением .:
"ПРЕДУПРЕЖДЕНИЕ: DatabaseConnectionImplementation :: executeQuery: Failed for query" ALTER TABLE flocksStartWeight RENAME TO flocksStartWeight_old ", () ПРЕДУПРЕЖДЕНИЕ:« Нет запроса, невозможно получить строку »
соответствующий код:
вызов executeQuery
bool query2Successful = db->executeQuery("ALTER TABLE flocksStartWeight RENAME TO flocksStartWeight_old")->isValid();
method
DatabaseResultUPtr DatabaseConnectionImplementation::executeQuery(const QString& query, const QVariantList& args)
{
QMutexLocker tsLocker(&tsLock);
if (!db.isOpen())
{
hDebug(TRACING_CONTEXT_RUNTIME_WARNING) << "DatabaseConnectionImplementation::executeQuery: Failed, database " << dbName << " not open";
return DatabaseResultUPtr(new DatabaseResult());
}
QSqlQuery q(db);
q.prepare(query);
for(int i = 0 ; i < args.size() ; i++)
q.bindValue(i, args.value(i));
if (!q.exec())
{
hDebug(TRACING_CONTEXT_RUNTIME_WARNING) << "DatabaseConnectionImplementation::executeQuery: Failed for query " << q.executedQuery() << ", " << args;
hDebug(TRACING_CONTEXT_RUNTIME_WARNING) << q.lastError().text();
return DatabaseResultUPtr(new DatabaseResult());
}
QMutexLocker scoped_lock(&queryMutex);
++queryCount;
return DatabaseResultUPtr(new DatabaseResult(q, this));
}
У меня много похожих переименований, и все они работали нормально. Единственное отличие заключалось в том, что flocksStartWeight не содержал никаких данных. Поэтому я вручную добавил одну строку в таблицу и повторил попытку. На этот раз это сработало. хорошо. Как мне переименовать пустую таблицу? РЕДАКТИРОВАТЬ:
Я добавил:
if(!q.prepare(query))
{
qDebug() << "Preparing query failed for " << query;
}
Он попадает в строку qDebug для запроса, поэтому он уже терпит неудачу в методе prepare.
РЕДАКТИРОВАТЬ: Когда я задал вопрос, я предполагал, что состояние базы данных было неправильным. Проблема не может быть воспроизведена, вопрос может быть удален.