成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

移動開發
本文介紹的是Qt數據庫 利用QSqlQuery類執行SQL語句,SQL即結構化查詢語言,是關系數據庫的標準語言。詳細內容我們先來看內容。

本文介紹的是Qt數據庫 利用QSqlQuery類執行SQL語句,是本文要介紹的內容,SQL即結構化查詢語言,是關系數據庫的標準語言。前面已經提到,在Qt中利用QSqlQuery類實現了執行SQL語句。需要說明,我們這里只是Qt教程,而非專業的數據庫教程,所以我們不會對數據庫中的一些知識進行深入講解,下面只是對最常用的幾個知識點進行講解。

我們下面先建立一個工程,然后講解四個知識點,分別是:

1、操作SQL語句返回的結果集。

2、在SQL語句中使用變量。

3、批處理操作。

4、事務操作。

我們新建Qt4 Gui Application工程,我這里工程名為query ,然后選中QtSql模塊,(注:在新版的Qt Creator中可能沒有模塊選擇頁面,我們需要手動在.pro工程文件中添加代碼“QT += sql” )Base class選QWidget。工程建好后,添加C++ Header File ,命名為connection.h ,更改其內容如下:

  1. #ifndef CONNECTION_H  
  2. #define CONNECTION_H  
  3. #include <QMessageBox> 
  4. #include <QSqlDatabase> 
  5. #include <QSqlQuery> 
  6.  
  7. static bool createConnection()  
  8. {  
  9.     QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);  
  10.     db.setDatabaseName(“:memory:”);  
  11.     if (!db.open()) {  
  12.         QMessageBox::critical(0, qApp->tr(“Cannot open database”),  
  13.             qApp->tr(“Unable to establish a database connection.”  
  14.                      ), QMessageBox::Cancel);  
  15.         return false;  
  16.     }  
  17.  
  18.     QSqlQuery query;  
  19.     query.exec(“create table student (id int primary key, ”  
  20.                “name varchar(20))”);  
  21.     query.exec(“insert into student values(0, ‘first’)”);  
  22.     query.exec(“insert into student values(1, ‘second’)”);  
  23.     query.exec(“insert into student values(2, ‘third’)”);  
  24.     query.exec(“insert into student values(3, ‘fourth’)”);  
  25.     query.exec(“insert into student values(4, ‘fifth’)”);  
  26.     return true;  
  27. }  
  28. #endif // CONNECTION_H 

然后更改main.cpp的內容如下:

  1. #include <QtGui/QApplication> 
  2. #include “widget.h”  
  3. #include “connection.h”  
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.      
  8.     if (!createConnection())  
  9.         return 1;  
  10.      
  11.     Widget w;  
  12.     w.show();  
  13.     return a.exec();  

可以看到,我們是在主函數中打開數據庫的,而數據庫連接用一個函數完成,并單獨放在一個文件中,這樣的做法使得主函數很簡潔。我們今后使用數據庫時均使用這種方法。我們打開數據庫連接后,新建了一個學生表,并在其中插入了幾條記錄。

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

表中的一行就叫做一條記錄,一列是一個屬性。這個表共有5條記錄,id和name兩個屬性。程序中的“id int primary key”表明id屬性是主鍵,也就是說以后添加記錄時,必須有id項。

下面我們打開widget.ui文件,在設計器中向界面上添加一個Push Button ,和一個Spin Box 。將按鈕的文本改為“查詢”,然后進入其單擊事件槽函數,更改如下。

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQuery query;  
  4.     query.exec(“select * from student”);  
  5.     while(query.next())  
  6.     {  
  7.         qDebug() << query.value(0).toInt() << query.value(1).toString();  
  8.     }  

我們在widget.cpp中添加頭文件:

  1. #include <QSqlQuery> 
  2. #include <QtDebug> 

然后運行程序,單擊“查詢”按鈕,效果如下:

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

可以看到在輸出窗口,表中的所有內容都輸出出來了。這表明我們的數據庫連接已經成功建立了。

操作SQL語句返回的結果集。

在上面的程序中,我們使用query.exec(“select * from student”);來查詢出表中所有的內容。其中的SQL語句“select * from student”中“*”號表明查詢表中記錄的所有屬性。而當query.exec(“select * from student”);這條語句執行完后,我們便獲得了相應的執行結果,因為獲得的結果可能不止一條記錄,所以我們稱之為結果集。

結果集其實就是查詢到的所有記錄的集合,而在QSqlQuery類中提供了多個函數來操作這個集合,需要注意這個集合中的記錄是從0開始編號的。最常用的有:

seek(int n) :query指向結果集的第n條記錄。

first() :query指向結果集的第一條記錄。

last() :query指向結果集的最后一條記錄。

next() :query指向下一條記錄,每執行一次該函數,便指向相鄰的下一條記錄。

previous() :query指向上一條記錄,每執行一次該函數,便指向相鄰的上一條記錄。

record() :獲得現在指向的記錄。

value(int n) :獲得屬性的值。其中n表示你查詢的第n個屬性,比方上面我們使用“select * from student”就相當于“select id, name from student”,那么value(0)返回id屬性的值,value(1)返回name屬性的值。該函數返回QVariant類型的數據,關于該類型與其他類型的對應關系,可以在幫助中查看QVariant。

at() :獲得現在query指向的記錄在結果集中的編號。

需要說明,當剛執行完query.exec(“select * from student”);這行代碼時,query是指向結果集以外的,我們可以利用query.next(),當第一次執行這句代碼時,query便指向了結果集的第一條記錄。當然我們也可以利用seek(0)函數或者first()函數使query指向結果集的第一條記錄。但是為了節省內存開銷,推薦的方法是,在query.exec(“select * from student”);這行代碼前加上query.setForwardOnly(true);這條代碼,此后只能使用next()和seek()函數。

下面將“查詢”按鈕的槽函數更改如下:

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQuery query;  
  4.     query.exec(“select * from student”);  
  5.     qDebug() << “exec next() :”;  
  6.     if(query.next())  
  7.     //開始就先執行一次next()函數,那么query指向結果集的第一條記錄  
  8.     {  
  9.         int rowNum = query.at();  
  10.         //獲取query所指向的記錄在結果集中的編號  
  11.         int columnNum = query.record().count();  
  12.         //獲取每條記錄中屬性(即列)的個數  
  13.         int fieldNo = query.record().indexOf(“name”);  
  14.         //獲取”name”屬性所在列的編號,列從左向右編號,最左邊的編號為0  
  15.         int id = query.value(0).toInt();  
  16.         //獲取id屬性的值,并轉換為int型  
  17.        QString name = query.value(fieldNo).toString();  
  18.         //獲取name屬性的值  
  19.         qDebug() << “rowNum is : ” << rowNum //將結果輸出  
  20.                 << ” id is : ” << id 
  21.                 << ” name is : ” << name 
  22.                 << ” columnNum is : ” << columnNum;  
  23.     }  
  24.     qDebug() << “exec seek(2) :”;  
  25.     if(query.seek(2))  
  26.     //定位到結果集中編號為2的記錄,即第三條記錄,因為第一條記錄的編號為0  
  27.     {  
  28.         qDebug() << “rowNum is : ” << query.at()  
  29.                 << ” id is : ” << query.value(0).toInt()  
  30.                 << ” name is : ” << query.value(1).toString();  
  31.     }  
  32.     qDebug() << “exec last() :”;  
  33.     if(query.last())  
  34.     //定位到結果集中最后一條記錄  
  35.     {  
  36.         qDebug() << “rowNum is : ” << query.at()  
  37.                 << ” id is : ” << query.value(0).toInt()  
  38.                 << ” name is : ” << query.value(1).toString();  
  39.     }  

然后在widget.cpp文件中添加頭文件。

  1. #include <QSqlRecord> 

運行程序,結果如下:

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

本文章原創于www.yafeilinux.com

小結:Qt數據庫 利用QSqlQuery類執行SQL語句 上篇 的內容后介紹完了,希望本文對你有幫助!要想深入了解數據庫的話,請參考

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

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-27 14:31:29

Qt 數據庫 SQL語句

2011-06-27 14:44:30

Qt 數據庫 QSqlQuery

2011-06-27 13:32:21

Qt 數據庫 QSqlQueryM

2011-06-21 15:48:41

2011-08-15 14:29:52

SQL Server數事務

2010-09-07 15:20:58

SQL語句事務

2010-11-18 10:06:16

Oracle數據庫性能

2011-06-21 15:31:04

Qt 數據庫 SQL

2011-01-06 09:28:19

SQL語句

2010-09-07 16:12:36

SQL語句數據庫壓縮

2009-03-09 17:46:16

ASP.NETSQLOracle

2010-04-16 09:41:42

Oracle數據庫查看

2011-09-09 10:10:13

SQL數據庫點滴

2011-09-01 19:00:08

SQL ServerDBCC語句

2010-06-28 10:36:42

SQL Server數

2011-03-30 09:07:46

數據庫

2023-05-10 08:29:12

2010-05-11 10:12:50

mysql數據庫sql

2019-03-01 18:50:09

SQL Server數據庫備份并壓縮

2010-07-15 15:37:13

SQL Server數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费观看毛片 | 欧美日韩网站 | 国产日韩91| 精品国产一区二区三区性色av | 亚洲一区二区三区在线播放 | 久久久久中文字幕 | 日韩精品久久一区 | 久久精品视频在线免费观看 | 国产一级在线观看 | 国产精品九九九 | www国产成人免费观看视频,深夜成人网 | 日本精品视频 | 日韩毛片网 | 伊人久久成人 | 在线男人天堂 | 欧美性jizz18性欧美 | 一区二区三区 在线 | 久久久久久国 | 日本不卡一区二区三区 | 羞羞视频在线观看免费观看 | 国产成人精品一区二区三区在线 | 亚洲大片一区 | 国产午夜精品一区二区三区嫩草 | 久久国产精品视频免费看 | 五月婷婷中文 | 2一3sex性hd| 久久久精品一区二区三区 | 欧美一区二区免费 | 久色一区 | 爱爱视频日本 | 国产欧美一区二区三区在线播放 | 四虎在线观看 | 精品二区 | 欧美精品一区在线发布 | 自拍偷拍亚洲视频 | 成人精品啪啪欧美成 | 日韩成人在线看 | 激情欧美日韩一区二区 | 一区二区国产在线观看 | 日本天堂一区 | 欧美日韩在线视频一区二区 |