閱讀676 返回首頁    go 阿裏雲 go 技術社區[雲棲]


[Qt教程] 第21篇 數據庫(一)Qt數據庫應用簡介

[Qt教程] 第21篇 數據庫(一)Qt數據庫應用簡介

樓主
 發表於 2013-5-13 20:56:39 | 查看: 1403| 回複: 13
Qt數據庫應用簡介
版權聲明

該文章原創於作者yafeilinux,轉載請注明出處!



導語

下麵十節講解數據庫和XML的相關內容。在學習數據庫相關內容前,建議大家掌握一些基本的SQL知識,應該可以看懂基本的SELECT、INSERT、UPDATE和DELETE等語句,因為在這幾篇教程中使用的都是非常簡單的操作,所以即便沒有數據庫的專業知識也可以看懂!



環境:Windows Xp + Qt 4.8.4+Qt Creator2.6.2



目錄

一、數據庫簡介
二、數據庫驅動
三、簡單的數據庫應用


正文


一、數據庫簡介

Qt中的QtSql模塊提供了對數據庫的支持,該模塊中的眾多類基本上可以分為三層,如下圖所示。

21-1.jpg

       其中驅動層為具體的數據庫和SQL接口層之間提供了底層的橋梁;SQL接口層提供了對數據庫的訪問,其中的QSqlDatabase類用來創建連接,QSqlQuery類可以使用SQL語句來實現與數據庫交互,其他幾個類對該層提供了支持;用戶接口層的幾個類實現了將數據庫中的數據鏈接到窗口部件上,這些類是使用前一章的模型/視圖框架實現的,它們是更高層次的抽象,即便不熟悉SQL也可以操作數據庫。如果要使用QtQql模塊中的這些類,需要在項目文件(.pro文件)中添加QT += sql這一行代碼。對應數據庫部分的內容,大家可以在幫助中查看SQL Programming關鍵字。


二、數據庫驅動

QtSql模塊使用數據庫驅動來和不同的數據庫接口進行通信。由於Qt的SQL模型的接口是獨立於數據庫的,所以所有數據庫特定的代碼都包含在了這些驅動中。Qt現在支持的數據庫驅動如下圖所示。

21-2.jpg

需要說明的是,由於GPL許可證的兼容性問題,並不是這裏列出的所有驅動插件都提供給了Qt的開源版本。下麵我們通過程序來查看一下現在版本的Qt中可用的數據庫插件。


1.新建Qt 控製台應用,名稱為sqldrivers


2.完成後將sqldrivers.pro項目文件中第一行代碼更改為:

QT       += core sql

表明使用了sql模塊,然後按下Ctrl + S快捷鍵保存該文件。


3.main.cpp文件的內容更改如下:
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QStringList>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
       qDebug() << driver;
    return a.exec();
}
    這裏先使用drivers()函數獲取了現在可用的數據庫驅動,然後分別進行了輸出。運行程序,結果如下圖所示。
21-3.jpg


       可以發現,現在隻支持三個數據庫。這裏要重點提一下SQLite數據庫,它是一款輕型的文件型數據庫,主要應用於嵌入式領域,支持跨平台,而且Qt對它提供了很好的默認支持,所以在本章後麵的內容中,我們將使用該數據庫作為例子來進行講解。


三、簡單的數據庫應用
       下麵使用QSLite數據庫來進行一個簡單的演示,創建一個數據庫表,然後查找其中的數據並進行輸出。我們更改main.cpp文件的內容如下:

  1. #include <QCoreApplication>
  2. #include <QSqlDatabase>
  3. #include <QDebug>
  4. #include <QSqlQuery>

  5. int main(int argc, char *argv[])
  6. {
  7.     QCoreApplication a(argc, argv);

  8.     //添加數據庫驅動
  9.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  10.     //數據庫連接命名
  11.     db.setDatabaseName(":memory:");
  12.     //打開數據庫
  13.     if(!db.open())
  14.     {
  15.         return false;
  16.     }

  17.     //以下執行相關sql語句
  18.     QSqlQuery query;

  19.     //新建student表,id設置為主鍵,還有一個name項
  20.     query.exec("create table student(id int primary key,name varchar)");

  21.     //向表中插入3條記錄
  22.     query.exec("insert into student values(1,'xiaogang')");
  23.     query.exec("insert into student values(2,'xiaoming')");
  24.     query.exec("insert into student values(3,'xiaohong')");

  25.     //查找表中id >=2 的記錄的id項和name項的值
  26.     query.exec("select id,name from student where id >= 2");

  27.     //query.next()指向查找到的第一條記錄,然後每次後移一條記錄
  28.     while(query.next())
  29.     {
  30.         //query.value(0)是id的值,將其轉換為int型
  31.         int value0 = query.value(0).toInt();
  32.         QString value1 = query.value(1).toString();
  33.         //輸出兩個值
  34.         qDebug() << value0 << value1 ;
  35.     }

  36.     return a.exec();
  37. }
複製代碼
這裏使用了SQLite數據庫,連接名為“:memory:”表示這是建立在內存中的數據庫,也就是說該數據庫隻在程序運行期間有效。如果需要保存該數據庫文件,我們可以將它更改為實際的文件路徑。程序中使用到的QSqlQuery類,將在後麵的內容中講到。運行程序,結果如下圖所示。

21-4.jpg



結語

       本節簡單介紹了一下Qt中數據庫相關的內容,可以看到,現在Qt支持的數據庫僅有兩類。如何才能讓Qt支持其他的數據庫呢,下一節,我們將以現在廣為使用的MySql為例,講解數據庫驅動的編譯。如果大家想係統的學習Qt數據庫部分內容,可以參考《Qt Creator快速入門》的第17章。



涉及到的源碼:  sqldrivers.zip (1.36 KB, 下載次數: 10) 

最後更新:2017-04-03 14:54:11

  上一篇:go [Qt教程] 第22篇 數據庫(二)編譯MySQL數據庫驅動
  下一篇:go [Qt教程] 第40篇 網絡(十)WebKit初識