以前的时候写过两个学生管理的数据库系统。一个是文件版本的,一个数mysql数据版的,这两个都是黑窗口,一直想写一个图形界面的。最近学习Qt,抽空写了个简单的图形数据库系统。
其实啊,说是数据库系统,其实只是调用了Qt中sql的数据库接口。本质上和和以前写的版本并没有什么区别(当然,这里用Qt的Sql接口支持大多数Sql语句,而且并不限一个数据库,一个表),按照数据库的历史发展,都属于数据库阶段的数据存储。
本项目分为以下几个部分:
1、连接数据库
2、数据库语句执行
3、结果显示
几个部分都比较简单,下面简单介绍。
一、连接数据库
本项目所用到的数据库是运行在本地的mysql数据库。在运行前需要打开mysql服务器,并配置好相关设置属性(如权限设置和端口监听等)。在本项目中连接很简单,使用QSqlDatabase进行相关参数配置,如主机,用户名、密码等。然后调用open打开即可。
代码如下:
bool Widget::SqlConnection()
{
db = QSqlDatabase::addDatabase("QMYSQL"); //sql驱动类型
db.setHostName("192.168.153.128"); //主机地址
db.setUserName("pan"); //用户名
db.setPassword("123456"); //密码
if(!db.open())
{
qDebug()<<"连接数据库失败";
return false;
}
else
{
qDebug()<<"成功连接数据库";
return true;
}
}
二、数据库语句执行
这一部分也很简单,主要过程是通过用户数据的sql语句,然后通过Mysql中提供的相关API将需要执行的sql语句传递给mysql服务器,然后返回相关结果。
主要代码如下所示:
void Widget::on_OKpushButton_clicked()
{
QString query = ui->que_lineEdit->text();
model->setQuery(query,db); //Sql查询模型执行成功
if(model->lastError().isValid()) //是否执行成功
{
QString error = model->lastError().text();
ui->show_label->setText(error);
qDebug()<<error;
}
else
{
ui->show_label->setText("Sql执行成功");
qDebug()<<"Sql执行成功";
}
ui->que_lineEdit->setText("");
ui->que_lineEdit->setFocus();
}
三、结果显示
这一部分也很简单,在第二部分中执行的sql语句执行之后,会将结果集带回来,然后会将执行成功或者失败的结果显示在下方。同时,若是查询类操作,会将返回的结果显示在TableView中。
代码如下:
model = new QSqlQueryModel(this); //数据库查询模型
ui->tableView->setModel(model); //为TableView显示设定数据模型
这一部分主要是使用了Qt中的模型视图架构,将QSqlQueryModel绑定在tableview中,这样返回的结果就会同步显示在tableview中。
最终显示如下:
![初始界面
注:为了更人性化,后来的代码又做了一点小改动,与博客中的稍有不同,但整体思路没有发生太大的变化。