筆者最近用Qt寫公司的考勤機。本來要求是要基於frameBuffer下用自己開發的easyGUI來進行上層應用開發,但是考慮到easyGUI提供的接口不是很多,就考慮用Qt來開發,順帶練練手。 廢話不多說,馬上進入主題。
一、QtSql模塊
Qt爲數據庫訪問提供的QtSql模塊實現了數據庫和Qt應用程序的無縫集成,同時爲開發人員提供了一套與平臺無關和具體所用數據庫均無關的調用接口。這使得開發人員只需掌握基本的SQL語句,就能進行簡單的數據庫應用程序開發。如下表所示,QtSql模塊由3部分組成。
層次 | 描述 |
驅動層 | 驅動層實現了特定數據庫與SQL接口的底層橋接。 |
SQL接口層 | SQL接口層提供了數據庫類的訪問 |
用戶接口層 | 用戶接口層提供從數據庫數據到用於數據庫表示的窗體的映射 |
二、數據庫驅動
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數據庫簡單應用