Named binding using named placeholders :
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname)VALUES (:id, :forename, :surname)");
query.bindValue(":id", 1001);
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname)VALUES (:id, :forename, :surname)");
query.bindValue(0, 1001);
query.bindValue(1, "Bart");
query.bindValue(2, "Simpson");
query.exec();
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname)VALUES (?, ?, ?)");
query.bindValue(0, 1001);
query.bindValue(1, "Bart");
query.bindValue(2, "Simpson");
query.exec();
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname)VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Bart");
query.addBindValue("Simpson");
query.exec();
This code calls a stored procedure called AsciiToInt(), passing it a character through its in parameter, and taking its result in the out parameter.
QSqlQuery query;
query.prepare("CALL AsciiToInt(?, ?)");
query.bindValue(0, "A");
query.bindValue(1, 0, QSql::Out);
query.exec();
int i = query.boundValue(1).toInt(); // i is 65
Note that unbound parameters will retain their values.Stored procedures that uses the return statement to return values, or return multiple result sets, are not fully supported.For specific details see SQL Database Drivers.
To bind NULL values, a null QVariant of the relevant type has to be added to the bound QVariantList; for example,QVariant(QVariant::String) should be used if you are using strings.
QSqlQuery q;
q.prepare("insert into myTable values (?, ?)");
QVariantList ints;
ints << 1 << 2 << 3 << QVariant(QVariant::Int);
q.addBindValue(ints);
QVariantList names;
names << "Harald" << "Boris" << "Trond" << QVariant(QVariant::String);
q.addBindValue(names);
if (!q.execBatch())
qDebug() << q.lastError();
The example above inserts four new rows into myTable :
1 Harald
2 Boris
3 Trond
NULL NULL
Warning: You must load the SQL driver and open the connection before a QSqlQuery is created.Also, the connection must remain open while the query exists; otherwise, the behavior ofQSqlQuery is undefined.