qt學習筆記(七)之數據庫簡介

筆者最近用Qt寫公司的考勤機。本來要求是要基於frameBuffer下用自己開發的easyGUI來進行上層應用開發,但是考慮到easyGUI提供的接口不是很多,就考慮用Qt來開發,順帶練練手。 廢話不多說,馬上進入主題。


一、QtSql模塊

Qt爲數據庫訪問提供的QtSql模塊實現了數據庫和Qt應用程序的無縫集成,同時爲開發人員提供了一套與平臺無關和具體所用數據庫均無關的調用接口。這使得開發人員只需掌握基本的SQL語句,就能進行簡單的數據庫應用程序開發。如下表所示,QtSql模塊由3部分組成。

層次 描述
驅動層 驅動層實現了特定數據庫與SQL接口的底層橋接。
SQL接口層 SQL接口層提供了數據庫類的訪問
用戶接口層 用戶接口層提供從數據庫數據到用於數據庫表示的窗體的映射
筆者有過在linux基於ncurses開發圖形界面的經驗。那項目要求提供記錄查詢功能,當時寫那個就很費腦。控件都自己封裝,Qt的用戶接口層仍夠完美的展示出數據庫信息,這樣的話開發人員就不用苦於設計表格控件了。

二、數據庫驅動
Qt支持數據庫驅動以插件的形式添加,當我們開發的時候,首先必須明確使用哪種數據庫。目前Qt支持的數據庫類型如下:

我們也可以通過代碼來查看本機Qt支持的數據庫。

如果想要使用QtSql模塊,則必須在工程文件上加入一行:

QT += sql
否則無法包含頭文件<QtSql>

    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    qDebug() << drivers;
運行程序,可以顯示現在所有能用的數據庫驅動了。

Available drivers:
("QSQLITE")
三、簡單的應用程序

最近在做考勤機,那麼就以這個爲例子吧。

    if(!QSqlDatabase::drivers().contains("QSQLITE"))
    {
        //如果數據庫驅動裏沒有SQLite,則錯誤警告
        QMessageBox::critical(this, tr("數據庫警告"), tr("系統需添加SQLite數據庫驅動"), QMessageBox::Cancel);
    }
    QSqlError error = db_Init();
    if(error.type() != QSqlError::NoError)
    {
        showError(error);
        return;
    }

我使用的是SQLite數據庫,所以要先確認下系統是否已安裝該驅動,錯誤則出現消息對話框提示。

我在db_Init() 創建一張表,並且添加了一些數據。 接下來查看數據庫數據,驗證是否添加正確

QSqlError MainWindow::db_Init()
{
    //QSqlDatabase::database("syscfg.dat").close();
    //QSqlDatabase::removeDatabase("syscfg.dat");

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加數據庫驅動
    db.setDatabaseName(":memory:");       //數據庫文件名,setDatabaseName(":memory:")指的是內存數據庫

    if(!db.open())
    {
        //如果打開失敗
        return db.lastError();
    }

    //創建人員組別表,2個參量 組別ID 和組別名稱
    QSqlQuery query;
    if(!query.exec("CREATE TABLE table_group(group_id INTEGER PRIMARY KEY, group_name VCHAR(10))"))
    {
        return query.lastError();
    }

    //添加數據
    query.exec("INSERT INTO table_group VALUES(1, 'teacher')");
    query.exec("INSERT INTO table_group VALUES(2, 'student')");

    //查看數據庫
    query.exec("SELECT * FROM table_group");

    while(query.next())     
    {
        int group_id = query.value(0).toInt();
        QString group_name = query.value(1).toString();
        qDebug() << "group id=" << group_id;
        qDebug() << "group name=" << group_name;
    }

    return QSqlError();
}

註釋已經很詳細了,這裏只涉及了簡單的SQL語句的使用。

執行程序後,可以看到我們對數據庫的操作是正確的。

group id= 1 
group name= "teacher" 
group id= 2 
group name= "student" 

就先寫到這吧,明天繼續。 在這裏祝大家節日快樂~~

在這裏附上程序源代碼下載鏈接:qt_SQLite數據庫簡單應用

以上純屬個人學習筆記,如果哪裏錯了,希望提出。願和大家一起共同學習,一起進步。我的郵箱地址是:[email protected]







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