388bool QSqlQuery::exec(
const QString& query)
395 qCWarning(lcSqlQuery,
"QSqlQuery::exec: called before driver has been set up");
398 if (d->ref.loadRelaxed() != 1) {
399 bool fo = isForwardOnly();
400 *
this = QSqlQuery(driver()->createResult());
401 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
404 d->sqlResult->clear();
405 d->sqlResult->setActive(
false);
406 d->sqlResult->setLastError(QSqlError());
407 d->sqlResult->setAt(QSql::BeforeFirstRow);
408 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
410 d->sqlResult->setQuery(query.trimmed());
411 if (!driver()->isOpen() || driver()->isOpenError()) {
412 qCWarning(lcSqlQuery,
"QSqlQuery::exec: database not open");
415 if (query.isEmpty()) {
416 qCWarning(lcSqlQuery,
"QSqlQuery::exec: empty query");
420 bool retval = d->sqlResult->reset(query);
422 qCDebug(lcSqlQuery()).nospace() <<
"Executed query (" << t.elapsed() <<
"ms, "
423 << d->sqlResult->size()
424 <<
" results, " << d->sqlResult->numRowsAffected()
425 <<
" affected): " << d->sqlResult->lastQuery();
580bool QSqlQuery::seek(
int index,
bool relative)
582 if (!isSelect() || !isActive())
587 d->sqlResult->setAt(QSql::BeforeFirstRow);
593 case QSql::BeforeFirstRow:
595 actualIdx = index - 1;
600 case QSql::AfterLastRow:
602 d->sqlResult->fetchLast();
603 actualIdx = at() + index + 1;
609 if ((at() + index) < 0) {
610 d->sqlResult->setAt(QSql::BeforeFirstRow);
613 actualIdx = at() + index;
618 if (isForwardOnly() && actualIdx < at()) {
619 qCWarning(lcSqlQuery,
"QSqlQuery::seek: cannot seek backwards in a forward only query");
622 if (actualIdx == (at() + 1) && at() != QSql::BeforeFirstRow) {
623 if (!d->sqlResult->fetchNext()) {
624 d->sqlResult->setAt(QSql::AfterLastRow);
629 if (actualIdx == (at() - 1)) {
630 if (!d->sqlResult->fetchPrevious()) {
631 d->sqlResult->setAt(QSql::BeforeFirstRow);
636 if (!d->sqlResult->fetch(actualIdx)) {
637 d->sqlResult->setAt(QSql::AfterLastRow);
944QSqlRecord QSqlQuery::record()
const
946 QSqlRecord rec = d->sqlResult->record();
949 for (qsizetype i = 0; i < rec.count(); ++i)
950 rec.setValue(i, value(i));
991bool QSqlQuery::prepare(
const QString& query)
993 if (d->ref.loadRelaxed() != 1) {
994 bool fo = isForwardOnly();
995 *
this = QSqlQuery(driver()->createResult());
997 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
999 d->sqlResult->setActive(
false);
1000 d->sqlResult->setLastError(QSqlError());
1001 d->sqlResult->setAt(QSql::BeforeFirstRow);
1002 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
1005 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: no driver");
1008 if (!driver()->isOpen() || driver()->isOpenError()) {
1009 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: database not open");
1012 if (query.isEmpty()) {
1013 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: empty query");
1017 qCDebug(lcSqlQuery,
"\n QSqlQuery::prepare: %ls", qUtf16Printable(query));
1019 return d->sqlResult->savePrepare(query);
1031bool QSqlQuery::exec()
1037 d->sqlResult->resetBindCount();
1039 if (d->sqlResult->lastError().isValid())
1040 d->sqlResult->setLastError(QSqlError());
1042 bool retval = d->sqlResult->exec();
1044 qCDebug(lcSqlQuery).nospace() <<
"Executed prepared query (" << t.elapsed() <<
"ms, "
1045 << d->sqlResult->size() <<
" results, " << d->sqlResult->numRowsAffected()
1046 <<
" affected): " << d->sqlResult->lastQuery();