Qt數據庫 利用QSqlQuery類執行SQL語句 下篇是本節需要介紹的內容,接着上一篇教程。Qt數據庫 利用QSqlQuery類執行SQL語句 上篇 ,也不多說了,直接看內容。
在SQL語句中使用變量。
我們先看下面的一個例子,將“查詢”按鈕的槽函數更改如下:
- 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;
- }
運行效果如下:
可以看到,在student表的最後又添加了一條記錄。在上面的程序中,我們先使用了prepare()函數,在其中利用了“:id”和“:name”來代替具體的數據,而後又利用bindValue()函數給id和name兩個屬性賦值,這稱爲綁定操作。其中編號0和1分別代表“:id”和“:name”,就是說按照prepare()函數中出現的屬性從左到右編號,最左邊是0 。這裏的“:id”和“:name”,叫做佔位符,這是ODBC數據庫的表示方法,還有一種Oracle的表示方法就是全部用“?”號。如下:
- query.prepare(“insert into student (id, name) ”
- “values (?, ?)”);
- query.bindValue(0, 5);
- query.bindValue(1, “sixth”);
- query.exec();
我們也可以利用addBindValue()函數,這樣就可以省去編號,它是按順序給屬性賦值的,如下:
- query.prepare(“insert into student (id, name) ”
- “values (?, ?)”);
- query.addBindValue(5);
- query.addBindValue(“sixth”);
- query.exec();
當用ODBC的表示方法時,我們也可以將編號用實際的佔位符代替,如下:
- query.prepare(“insert into student (id, name) ”
- “values (:id, :name)”);
- query.bindValue(“:id”, 5);
- query.bindValue(“:name”, “sixth”);
- query.exec();
以上各種形式的表示方式效果是一樣的。特別注意,在最後一定要執行exec()函數,所做的操作才能被真正執行。
下面我們就可以利用綁定操作在SQL語句中使用變量了。
- 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值進行綁定
- query.exec();
- query.next(); //指向第一條記錄
- qDebug() << query.value(0).toString();
- }
運行程序,效果如下:
我們改變spinBox的數值大小,然後按下“查詢”按鈕,可以看到對應的結果就出來了。