【QT学习】15.数据库

一。安装数据库

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不能设置为自增

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值