- 論壇徽章:
- 0
|
從今天開始我們學習Qt數(shù)據(jù)庫編程的內(nèi)容。
先說明:我們以后使用現(xiàn)在最新的基于Qt 4.6.2的Qt Creator 1.3.1 Windows版本,該版本是2010年2月17日發(fā)布的。
數(shù)據(jù)庫幾乎是每個較大的軟件所必須應(yīng)用的,而在Qt中也使用QtSql模塊實現(xiàn)了對數(shù)據(jù)庫的完美支持。我們在Qt Creator的幫助中查找QtSql Module,其內(nèi)容如下圖:

可以看到這個模塊是一組類的集合,使用這個模塊我們需要加入頭文件#include <QtSql>,而在工程文件中需要加入一行代碼:QT += sql
這里每個類的作用在后面都有簡單的介紹,你也可以進入其中查看其詳細內(nèi)容。下面我們先簡單的說一下QSqlDatabase類和QSqlQuery類。
QSqlDatabase類實現(xiàn)了數(shù)據(jù)庫連接的操作,現(xiàn)在Qt支持的數(shù)據(jù)庫類型有如下幾種:

而現(xiàn)在我們使用的免費的Qt只提供了SQLite和ODBC數(shù)據(jù)庫的驅(qū)動(我們可以在Qt
Creator安裝目錄下的qt\plugins\sqldrivers文件夾下查看),而其他數(shù)據(jù)庫的驅(qū)動需要我們自己添加。SQLite是一個小巧的
嵌入式數(shù)據(jù)庫,關(guān)于它的介紹你可以自己在網(wǎng)上查找。
QSqlQuery類用來執(zhí)行SQL語句。(關(guān)于SQL語句:在我的教程中只會出現(xiàn)很簡單的SQL語句,你沒有相關(guān)知識也可以看懂,但是如果想進行深入學習,就需要自己學習相關(guān)知識了。)
下面我們就先利用這兩個類來實現(xiàn)最簡單的數(shù)據(jù)庫程序,其他的類我們會在以后的教程中逐個學習到。
1.新建Qt控制臺工程。

2.選擇上QtSql模塊,這樣就會自動往工程文件中添加QT += sql 這行代碼了。

3.修改main.cpp中的內(nèi)容如下。
#include <QtCore/QCoreApplication>
#include <QtSql>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”); //添加數(shù)據(jù)庫驅(qū)動
db.setDatabaseName(“:memory:”); //數(shù)據(jù)庫連接命名
if(!db.open()) //打開數(shù)據(jù)庫
{
return false;
}
QSqlQuery query; //以下執(zhí)行相關(guān)QSL語句
query.exec(“create table student(id int primary key,name varchar)”);
//新建student表,id設(shè)置為主鍵,還有一個name項
query.exec(“insert into student values(1,’xiaogang’)”);
query.exec(“insert into student values(2,’xiaoming’)”);
query.exec(“insert into student values(3,’xiaohong’)”);
//向表中插入3條記錄
query.exec(“select id,name from student where id >= 2″);
//查找表中id >=2 的記錄的id項和name項的值
while(query.next()) //query.next()指向查找到的第一條記錄,然后每次后移一條記錄
{
int ele0 = query.value(0).toInt(); //query.value(0)是id的值,將其轉(zhuǎn)換為int型
QString ele1 =query.value(1).toString();
qDebug() << ele0 <<ele1 ; //輸出兩個值
}
return a.exec();
}
我們使用了SQLite數(shù)據(jù)庫,連接名為“:memory:”表示這是建立在內(nèi)存中的數(shù)據(jù)庫,也就是說該數(shù)據(jù)庫只在程序運行期間有效。如果需要保存該數(shù)據(jù)庫文件,我們可以將它更改為實際的文件路徑。
4.最終效果如下。

5.我們可以將主函數(shù)更改如下。
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << “Available drivers:”;
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << “\t” << driver;
return a.exec();
}
這樣運行程序就可以顯示現(xiàn)在所有能用的數(shù)據(jù)庫驅(qū)動了。

可以看到現(xiàn)在可用的數(shù)據(jù)庫驅(qū)動只有三個。 |
|