377bool QSqlQuery::exec(
const QString& query)
384 qCWarning(lcSqlQuery,
"QSqlQuery::exec: called before driver has been set up");
387 if (d->ref.loadRelaxed() != 1) {
388 bool fo = isForwardOnly();
389 *
this = QSqlQuery(driver()->createResult());
390 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
393 d->sqlResult->clear();
394 d->sqlResult->setActive(
false);
395 d->sqlResult->setLastError(QSqlError());
396 d->sqlResult->setAt(QSql::BeforeFirstRow);
397 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
399 d->sqlResult->setQuery(query.trimmed());
400 if (!driver()->isOpen() || driver()->isOpenError()) {
401 qCWarning(lcSqlQuery,
"QSqlQuery::exec: database not open");
404 if (query.isEmpty()) {
405 qCWarning(lcSqlQuery,
"QSqlQuery::exec: empty query");
409 bool retval = d->sqlResult->reset(query);
411 qCDebug(lcSqlQuery()).nospace() <<
"Executed query (" << t.elapsed() <<
"ms, "
412 << d->sqlResult->size()
413 <<
" results, " << d->sqlResult->numRowsAffected()
414 <<
" affected): " << d->sqlResult->lastQuery();
569bool QSqlQuery::seek(
int index,
bool relative)
571 if (!isSelect() || !isActive())
576 d->sqlResult->setAt(QSql::BeforeFirstRow);
582 case QSql::BeforeFirstRow:
584 actualIdx = index - 1;
589 case QSql::AfterLastRow:
591 d->sqlResult->fetchLast();
592 actualIdx = at() + index + 1;
598 if ((at() + index) < 0) {
599 d->sqlResult->setAt(QSql::BeforeFirstRow);
602 actualIdx = at() + index;
607 if (isForwardOnly() && actualIdx < at()) {
608 qCWarning(lcSqlQuery,
"QSqlQuery::seek: cannot seek backwards in a forward only query");
611 if (actualIdx == (at() + 1) && at() != QSql::BeforeFirstRow) {
612 if (!d->sqlResult->fetchNext()) {
613 d->sqlResult->setAt(QSql::AfterLastRow);
618 if (actualIdx == (at() - 1)) {
619 if (!d->sqlResult->fetchPrevious()) {
620 d->sqlResult->setAt(QSql::BeforeFirstRow);
625 if (!d->sqlResult->fetch(actualIdx)) {
626 d->sqlResult->setAt(QSql::AfterLastRow);
933QSqlRecord QSqlQuery::record()
const
935 QSqlRecord rec = d->sqlResult->record();
938 for (qsizetype i = 0; i < rec.count(); ++i)
939 rec.setValue(i, value(i));
980bool QSqlQuery::prepare(
const QString& query)
982 if (d->ref.loadRelaxed() != 1) {
983 bool fo = isForwardOnly();
984 *
this = QSqlQuery(driver()->createResult());
986 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
988 d->sqlResult->setActive(
false);
989 d->sqlResult->setLastError(QSqlError());
990 d->sqlResult->setAt(QSql::BeforeFirstRow);
991 d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy());
994 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: no driver");
997 if (!driver()->isOpen() || driver()->isOpenError()) {
998 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: database not open");
1001 if (query.isEmpty()) {
1002 qCWarning(lcSqlQuery,
"QSqlQuery::prepare: empty query");
1006 qCDebug(lcSqlQuery,
"\n QSqlQuery::prepare: %ls", qUtf16Printable(query));
1008 return d->sqlResult->savePrepare(query);
1020bool QSqlQuery::exec()
1026 d->sqlResult->resetBindCount();
1028 if (d->sqlResult->lastError().isValid())
1029 d->sqlResult->setLastError(QSqlError());
1031 bool retval = d->sqlResult->exec();
1033 qCDebug(lcSqlQuery).nospace() <<
"Executed prepared query (" << t.elapsed() <<
"ms, "
1034 << d->sqlResult->size() <<
" results, " << d->sqlResult->numRowsAffected()
1035 <<
" affected): " << d->sqlResult->lastQuery();