1.QtSql模块
Qt为数据库访问提供的QtSql模块实现了数据库和Qt应用程序的无缝集成,同时为开发人员提供了一套与平台无关和具体所用数据库均无关的调用接口。这使得开发人员只需掌握基本的SQL语句,就能进行简单的数据库应用程序开发。如下表所示,QtSql模块由3部分组成。
层次 | 描述 |
驱动层 | 驱动层实现了特定数据库与SQL接口的底层桥接。 |
SQL接口层 | SQL接口层提供了数据库类的访问 |
用户接口层 | 用户接口层提供从数据库数据到用于数据库表示的窗体的映射 |
2.数据库驱动
Qt支持数据库驱动以插件的形式添加,当我们开发的时候,首先必须明确使用哪种数据库。目前Qt支持的数据库类型如下:
我们也可以通过代码来查看本机Qt支持的数据库。
如果想要使用QtSql模块,则必须在工程文件上加入一行:
QT += sql
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
qDebug() << drivers;
运行程序,可以显示现在所有能用的数据库驱动了。
3.简单的应用程序
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();
}