Qt數(shù)據(jù)庫(kù) 利用QSqlQuery類(lèi)執(zhí)行SQL語(yǔ)句 中篇
Qt數(shù)據(jù)庫(kù) 利用QSqlQuery類(lèi)執(zhí)行SQL語(yǔ)句 下篇是本節(jié)需要介紹的內(nèi)容,接著上一篇教程。Qt數(shù)據(jù)庫(kù) 利用QSqlQuery類(lèi)執(zhí)行SQL語(yǔ)句 上篇 ,也不多說(shuō)了,直接看內(nèi)容。
在SQL語(yǔ)句中使用變量。
我們先看下面的一個(gè)例子,將“查詢”按鈕的槽函數(shù)更改如下:
- void Widget::on_pushButton_clicked()
- {
- QSqlQuery query;
- query.prepare(“insert into student (id, name) ”
- “values (:id, :name)”);
- query.bindValue(0, 5);
- query.bindValue(1, “sixth”);
- query.exec();
- //下面輸出最后一條記錄
- query.exec(“select * from student”);
- query.last();
- int id = query.value(0).toInt();
- QString name = query.value(1).toString();
- qDebug() << id << name;
- }
運(yùn)行效果如下:
可以看到,在student表的最后又添加了一條記錄。在上面的程序中,我們先使用了prepare()函數(shù),在其中利用了“:id”和“:name”來(lái)代替具體的數(shù)據(jù),而后又利用bindValue()函數(shù)給id和name兩個(gè)屬性賦值,這稱為綁定操作。其中編號(hào)0和1分別代表“:id”和“:name”,就是說(shuō)按照prepare()函數(shù)中出現(xiàn)的屬性從左到右編號(hào),最左邊是0 。這里的“:id”和“:name”,叫做占位符,這是ODBC數(shù)據(jù)庫(kù)的表示方法,還有一種Oracle的表示方法就是全部用“?”號(hào)。如下:
- query.prepare(“insert into student (id, name) ”
- “values (?, ?)”);
- query.bindValue(0, 5);
- query.bindValue(1, “sixth”);
- query.exec();
我們也可以利用addBindValue()函數(shù),這樣就可以省去編號(hào),它是按順序給屬性賦值的,如下:
- query.prepare(“insert into student (id, name) ”
- “values (?, ?)”);
- query.addBindValue(5);
- query.addBindValue(“sixth”);
- query.exec();
當(dāng)用ODBC的表示方法時(shí),我們也可以將編號(hào)用實(shí)際的占位符代替,如下:
- query.prepare(“insert into student (id, name) ”
- “values (:id, :name)”);
- query.bindValue(“:id”, 5);
- query.bindValue(“:name”, “sixth”);
- query.exec();
以上各種形式的表示方式效果是一樣的。特別注意,在最后一定要執(zhí)行exec()函數(shù),所做的操作才能被真正執(zhí)行。
下面我們就可以利用綁定操作在SQL語(yǔ)句中使用變量了。
- void Widget::on_pushButton_clicked()
- {
- QSqlQuery query;
- query.prepare(“select name from student where id = ?”);
- int id = ui->spinBox->value(); //從界面獲取id的值
- query.addBindValue(id); //將id值進(jìn)行綁定
- query.exec();
- query.next(); //指向第一條記錄
- qDebug() << query.value(0).toString();
- }
運(yùn)行程序,效果如下:
我們改變spinBox的數(shù)值大小,然后按下“查詢”按鈕,可以看到對(duì)應(yīng)的結(jié)果就出來(lái)了。
小結(jié):Qt數(shù)據(jù)庫(kù) 利用QSqlQuery類(lèi)執(zhí)行SQL語(yǔ)句 中篇的內(nèi)容介紹完了,希望本節(jié)內(nèi)容對(duì)你有幫助,想繼續(xù)深入了解的話,請(qǐng)參考