笔者最近用Qt写公司的考勤机。本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手。 废话不多说,马上进入主题。
一、QtSql模块
Qt为数据库访问提供的QtSql模块实现了数据库和Qt应用程序的无缝集成,同时为开发人员提供了一套与平台无关和具体所用数据库均无关的调用接口。这使得开发人员只需掌握基本的SQL语句,就能进行简单的数据库应用程序开发。如下表所示,QtSql模块由3部分组成。
层次 | 描述 |
驱动层 | 驱动层实现了特定数据库与SQL接口的底层桥接。 |
SQL接口层 | SQL接口层提供了数据库类的访问 |
用户接口层 | 用户接口层提供从数据库数据到用于数据库表示的窗体的映射 |
二、数据库驱动
Qt支持数据库驱动以插件的形式添加,当我们开发的时候,首先必须明确使用哪种数据库。目前Qt支持的数据库类型如下:
我们也可以通过代码来查看本机Qt支持的数据库。
如果想要使用QtSql模块,则必须在工程文件上加入一行:
- QT += sql
- qDebug() << "Available drivers:";
- QStringList drivers = QSqlDatabase::drivers();
- qDebug() << drivers;
- Available drivers:
- ("QSQLITE")
最近在做考勤机,那么就以这个为例子吧。
- <pre name="code" class="cpp">
- 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() 创建一张表,并且添加了一些数据。 接下来查看数据库数据,验证是否添加正确
- <pre name="code" class="cpp"><pre name="code" class="cpp">
- 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语句的使用。
- 执行程序后,可以看到我们对数据库的操作是正确的。
- </span></span></p><pre name="code" class="plain">
- group id= 1
- group name= "teacher"
- group id= 2
- group name= "student"