一。安装数据库
1.判断数据库是否安装成功
方法一:命令行检测
1.进入命令行(不需要管理员模式)
2.结果说是欢迎进入mysql,表示mysql成功安装
方法二:navicat连接mysql
二。qt上配置MySQL
1.配置qt之前
1.点击mysql.pro修改代码--》添加mysql的地址
2.上述运行之后-》把上面生成的dll,放到此文件夹中
3.结果:
补充:只能使用64位来处理数据库
成功表现:运行下面两行代码成功
三。实例,初步创建数据库,删除数据库记录
结果:
连接数据库成功。
可以根据名称删除数据库记录:
(删除--》确定)删除操作 (删除--》取消)取消操作
步骤:
1.添加框架
QT+=sql
2.添加头文件
//数据库头文件
#include <QSqlDatabase>
//执行数据库指令的类
#include <QSqlQuery>
//执行一系列数据库指令的类
#include <QVariantList>
3.绘图与三个槽函数
4.连接数据库
//查看当前qt支持的数据库
qDebug()<<QSqlDatabase::drivers();
//添加qt支持的数据库
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
//连接mysql数据库-----------------
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("********");
db.setDatabaseName("student");
//连接数据库
if(!db.open()){
QMessageBox::warning(this,"错误","数据库连接失败");
return;
}
qDebug() << "连接数据库成功!";
5.插入数据库(单个插入,多个插入)
//一个一个插入
//query.exec("insert into student(id,name,age,score) values(3,'李四',44,77);");
//一次插入多个数据---------------
QSqlQuery query;
//占位
query.prepare("insert into student(id,name,sex,age,score) values(:id,:name,:sex,:age,:score)");
//准备数据
QVariantList idList;
idList<<1<<2<<3<<4;
QVariantList nameList;
nameList<<"张三"<<"李四" <<"王五" <<"陈六" ;
QVariantList sexList;
sexList<<"男"<<"男"<<"男"<<"男";
QVariantList ageList;
ageList<<20<<21<<22<<23;
QVariantList scoreList;
scoreList<< 99<<66<<77<<33;
//绑定
query.bindValue(":id",idList);
query.bindValue(":name",nameList);
query.bindValue(":sex",sexList);
query.bindValue(":age",ageList);
query.bindValue(":score",scoreList);
//添加
query.execBatch();
//查找-------------------------
//方式一:
query.exec("select * from student;");
while(query.next()){
qDebug()<<query.value("id").toInt()
<<query.value("name").toString()
<<query.value("sex").toString()
<<query.value("age").toInt()
<<query.value("score").toInt();
}
//方式二:
query.exec("select * from student where id=1;");
while(query.next()){
qDebug()<<query.value(0).toInt()
<<query.value(1).toString()
<<query.value(2).toString()
<<query.value(3).toInt()
<<query.value(4).toInt();
}
6.删除槽函数(创建一个字符串存放数据,启动事务,运行指令)
QSqlDatabase::database().transaction();//启动事务
为什么要启动事务?
答:启动事务后,才可以进行回滚,这样的话可以对误删进行处理。
//删除
void Widget::on_btnDelete_clicked()
{
QString name = ui->lineEdit->text();
//根据名字,删除数据
QString sql = QString("delete from student where name = '%1';").arg(name);
//启动事务
QSqlDatabase::database().transaction();
//执行数据指令
QSqlQuery query;
query.exec(sql);
qDebug()<<"执行删除";
}
7.确定槽函数
//确定
void Widget::on_btnSure_clicked()
{
//向数据库提交事务
QSqlDatabase::database().commit();
}
8.取消槽函数
//取消
void Widget::on_btnCancle_clicked()
{
//回滚
QSqlDatabase::database().rollback();
}
四。QSqlTablemodel数据库显示控件
1.结果:
可以直接修改,增删改查。
2.代码
(1)头文件
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>//执行单个指令
#include <QVariantList>//一次执行多条指令
#include <QSqlTableModel>//qt提供的数据库显示控件
#include <QSqlRecord>//针对上述控件的处理
(2)添加数据库模型
//数据库模型
QSqlTableModel* pTableModel;
(3)连接数据库
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//数据库连接----------------------------------
//查看当前qt支持的数据库
qDebug() << QSqlDatabase::drivers();
//添加mysql数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//设置数据库连接的 参数
db.setHostName("127.0.0.1"); //地址
db.setUserName("root"); //用户名
db.setPassword("sxjh5394"); //密码
db.setDatabaseName("student"); //数据库名
//连接数据库
if(!db.open()){
QMessageBox::warning(this,"错误","数据库连接失败");
return;
}
qDebug() << "连接数据库成功!";
}
(4)数据库模型的创建
//数据库模型的创建
pTableModel = new QSqlTableModel(this);
//设置表格
pTableModel->setTable("student");
//显示模型
ui->tableView->setModel(pTableModel);
pTableModel->select();
//设置编辑模式,手动提交修改而不是直接在界面上修改
pTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
//设置只读
//ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
(5)查找,删除,增加,修改(自带修改),确定/删除
//查找
void Widget::on_btnFind_clicked()
{
QString name=ui->lineEdit->text();
QString str=QString("name='%1'").arg(name);
pTableModel->setFilter(str);
pTableModel->select();
}
//加入
void Widget::on_btnAdd_clicked()
{
//获取一条空记录
QSqlRecord record=pTableModel->record();
//获取当前 记录条数 行数
int row=pTableModel->rowCount();
//添加空行
pTableModel->insertRecord(row,record);
}
//删除
void Widget::on_btnDelete_clicked()
{
//先获取用户选中的
QItemSelectionModel* pSelectionModel=ui->tableView->selectionModel();
//获取用户选中的每一条
QModelIndexList list=pSelectionModel->selectedRows();
//循环删除
for(int i=0;i<list.size();i++){
pTableModel->removeRow(list.at(i).row());
}
}
//确定
void Widget::on_btnSure_clicked()
{
pTableModel->submitAll();//提交所有
}
//取消
void Widget::on_btnCancle_clicked()
{
pTableModel->revertAll();//恢复挂起修改
pTableModel->submitAll();
}
五。sqlite与数据库的区别
MySQL:
1. 企业级应用:MySQL因其强大的功能、性能和可扩展性,常用于企业级应用,包括电子商务、在线支付、社交网络等。
2. 大数据处理:MySQL可以处理大量数据,并支持多核CPU和分布式存储,适合大数据处理和分析。
3. 云服务和托管服务:MySQL广泛用于云服务和托管服务,如Amazon RDS、阿里云RDS等。
4. 复杂数据查询:MySQL支持复杂的SQL查询和多表连接,适合需要复杂数据操作的应用。
5. 多用户环境:MySQL支持多用户和并发访问,适合需要多用户同时访问数据库的应用。
SQLite:qt中数据放在本地
1. 嵌入式系统:SQLite因其轻量级和零配置的特点,常用于嵌入式系统,如移动设备、物联网设备等。
2. 桌面和移动应用:SQLite可以嵌入到桌面和移动应用中,用于本地数据存储和查询。
3. 开发和测试:由于其简单的安装和易于使用的特性,SQLite常用于开发和测试环境。
4. 轻量级数据库应用:SQLite适合那些不需要复杂查询和事务支持的应用。
5. 个人和小型项目:SQLite可以用于个人和小型项目,如个人博客、小型论坛等。
其余与mysql一样:注意sqlite不能设置为自增