Qt數據庫 利用QSqlQuery類執行SQL語句

Qt數據庫 利用QSqlQuery類執行SQL語句 下篇是本節需要介紹的內容,接着上一篇教程。Qt數據庫 利用QSqlQuery類執行SQL語句 上篇 ,也不多說了,直接看內容。

SQL語句中使用變量。

我們先看下面的一個例子,將“查詢”按鈕的槽函數更改如下:

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQuery query;  
  4.     query.prepare(“insert into student (id, name) ”  
  5.                   “values (:id, :name)”);  
  6.     query.bindValue(0, 5);  
  7.     query.bindValue(1, “sixth”);  
  8.     query.exec();  
  9.  
  10.     //下面輸出最後一條記錄  
  11.     query.exec(“select * from student”);  
  12.     query.last();  
  13.     int id = query.value(0).toInt();  
  14.     QString name = query.value(1).toString();  
  15.     qDebug() << id << name;  

運行效果如下:

Qt數據庫 利用QSqlQuery類執行SQL語句 中篇

可以看到,在student表的最後又添加了一條記錄。在上面的程序中,我們先使用了prepare()函數,在其中利用了“:id”和“:name”來代替具體的數據,而後又利用bindValue()函數給id和name兩個屬性賦值,這稱爲綁定操作。其中編號0和1分別代表“:id”和“:name”,就是說按照prepare()函數中出現的屬性從左到右編號,最左邊是0 。這裏的“:id”和“:name”,叫做佔位符,這是ODBC數據庫的表示方法,還有一種Oracle的表示方法就是全部用“?”號。如下:

  1. query.prepare(“insert into student (id, name) ”  
  2.                   “values (?, ?)”);  
  3. query.bindValue(0, 5);  
  4. query.bindValue(1, “sixth”);  
  5. query.exec(); 

我們也可以利用addBindValue()函數,這樣就可以省去編號,它是按順序給屬性賦值的,如下:

  1. query.prepare(“insert into student (id, name) ”  
  2.                   “values (?, ?)”);  
  3. query.addBindValue(5);  
  4. query.addBindValue(“sixth”);  
  5. query.exec(); 

當用ODBC的表示方法時,我們也可以將編號用實際的佔位符代替,如下:

  1. query.prepare(“insert into student (id, name) ”  
  2.                       “values (:id, :name)”);  
  3. query.bindValue(“:id”, 5);  
  4. query.bindValue(“:name”, “sixth”);  
  5. query.exec(); 

以上各種形式的表示方式效果是一樣的。特別注意,在最後一定要執行exec()函數,所做的操作才能被真正執行。

下面我們就可以利用綁定操作在SQL語句中使用變量了。

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQuery query;  
  4.     query.prepare(“select name from student where id = ?”);  
  5.     int id = ui->spinBox->value(); //從界面獲取id的值  
  6.     query.addBindValue(id); //將id值進行綁定  
  7.     query.exec();  
  8.     query.next(); //指向第一條記錄  
  9.     qDebug() << query.value(0).toString();  

運行程序,效果如下:

Qt數據庫 利用QSqlQuery類執行SQL語句 中篇

我們改變spinBox的數值大小,然後按下“查詢”按鈕,可以看到對應的結果就出來了。

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