经过(九)的驱动配置,我们可以正式来学习MySQL了。
1.对数据库进行访问,添加表格
.pro文件
QT += core gui sql
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include<QSqlDatabase>//Mysql
#include<QDebug>//打印
#include<QMessageBox>//模态对话框的头文件
#include<QSqlError>//lasterror用到的头文件
#include<QSqlQuery>//新建表用到的头文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//打印Qt支持的数据库驱动
qDebug() << QSqlDatabase::drivers();
/*("QSQLITE"静态数据库,不需要服务器,和文件一样,a.db
, "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")*/
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");//添加Mysql数据库
db.setHostName("0.0.0.0");//数据库服务器IP
db.setUserName("eagle");//数据库用户名
db.setPassword("123456");//数据库密码
db.setDatabaseName("checksysterm");//使用哪个数据库
//打开数据库
if(!db.open())
{
QMessageBox::warning(this,"错误",db.lastError().text());
return;
}
QSqlQuery query;
query.exec("create table test(id int primary key auto_increment,state varchar(255),time int)");
}
Widget::~Widget()
{
delete ui;
}
效果:
2.插入数据库操作(对应上面代码)
1)单条插入
QSqlQuery query;
query.exec("insert into test(id, state, time) values(1, 'open', 2)");
效果:
2)批量插入(两种方法a和b,个人推荐第二种)
a.需要给字符串顺序绑定值
//预处理语句
query.prepare("insert into test(state, time) values(?, ?)");//?占位符
//给字段设置内容 list
QVariantList stateList;
stateList<<"open"<<"close"<<"close";
QVariantList timeList;
timeList<<5<<8<<10;
//给字段绑定相应的值,顺序绑定
query.addBindValue(stateList);
query.addBindValue(timeList);
//执行预处理命令
query.execBatch();
效果:(一定要一一对应了,顺序排列)
b.不需要给字符串顺序绑定
//占位符::+自定义名字
query.prepare("insert into test(state, time) values(:state, :time)");//?占位符
//给字段设置内容 list
QVariantList stateList;
stateList<<"open"<<"open"<<"close";
QVariantList timeList;
timeList<<1<<2<<3;
//给字段绑定相应的值,顺序绑定
query.bindValue(":state",stateList);
query.bindValue(":time",timeList);
//执行预处理命令
query.execBatch();
效果:
3.对数据库信息删除操作(做一个界面,,打包后就很方便对数据库操作)
设计个ui:
代码:
//对应删除按钮
void Widget::on_buttonDel_clicked()
{
//获取编辑内容
QString state = ui->lineEdit->text();
QString sql=QString("delete from test where state ='%1'").arg(state);
//开启一个事务
QSqlDatabase::database().transaction();
QSqlQuery query;
query.exec(sql);
}
//对应保存按钮
void Widget::on_buttonSave_clicked()
{
//确定删除操作
QSqlDatabase::database().commit();
}
//对应撤销按钮
void Widget::on_buttonCancel_clicked()
{
//回滚
QSqlDatabase::database().rollback();
}
//对应关闭按钮
void Widget::on_buttonclose_clicked()
{
this->close();
}
效果:
a.确定删除
按下撤销按钮则数据不删除,如果发现数据删除了,无法回滚,可能是数据库的自动提交没有关闭,这需要在数据库中设置。
4.更新数据
query.exec("update test set state = 'close' where id= 1");
数据库中原数据: 更新后:
5.查询数据
1)遍历全部显示
query.exec("select * from test");
while(query.next())//遍历数据库
{
//取出当前行
qDebug()<<query.value(0).toInt()
<<query.value(1).toString()//通过列数
<<query.value("time").toInt();//通过字段
}
效果:
2)遍历,选择显示
query.exec("select * from test where state = 'open'");//选择显示
while(query.next())//遍历数据库
{
//取出当前行
qDebug()<<query.value(0).toInt()
<<query.value(1).toString()//通过列数
<<query.value("time").toInt();//通过字段
}
效果:
转载:https://blog.csdn.net/visual_eagle/article/details/105538747