Qt數據庫SQL語句綁定方式與插入空值

Approaches to Binding Values
Below we present the same example using each of the four different binding approaches, as well as one example of binding values to a stored procedure.


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();


Positional binding using named placeholders :
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();


Binding values using positional placeholders(version 1) :
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();


Binding values using positional placeholders(version 2) :
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname)VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Bart");
query.addBindValue("Simpson");

query.exec();


Binding values to a stored procedure :
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.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章