Qt学习(十):QT连接mysql(增加、删除、遍历)

12 篇文章 2 订阅

知识点

https://github.com/taw19960426/Qt_study/tree/main/DataBase

结果演示

在这里插入图片描述

问题解决

连接数据库后,执行命令以后,数据库里面没有相应的结果,打印后错误是:QSqlError(“2036”, “QMYSQL3: Unable to bind value”, "Using unsupported buffer
原因:
之前我安装的libmysql.dll与版本不兼容
解决办法:将上面github项目文件下的libmysql.dll复制到Qt的安装目录bin文件夹下
在这里插入图片描述

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>

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"); //数据库服务器IP
    db.setUserName("root"); //数据库用户名
    db.setPassword("qaz12580"); //密码
    db.setDatabaseName("info"); //使用哪个数据库

    //打开数据库
    if( !db.open() ) //数据库打开失败
    {
        QMessageBox::warning(this, "错误", db.lastError().text());
        return;
    }

    //创建表
    QSqlQuery query;
//    query.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int);");

//    //插入
//    //query.exec("insert into student(id, name, age, score) values(1, 'xiaoMing', 18, 59);");

//    //批量插入
//    //oracle风格
//    //占位符 : + 自定义名字
//    query.prepare("insert into student(name, age, score) values(:name, :age, :score)");
//    //给字段设置内容 list
//    QVariantList nameList;
//    nameList << "xiaod" << "xiaoe" << "xiaof";
//    QVariantList ageList;
//    ageList << 13 << 16 << 45;
//    QVariantList scoreList;
//    scoreList << 85 << 16 << 66;
//    //给字段绑定
//    query.bindValue(":name",nameList);
//    query.bindValue(":age",ageList);
//    query.bindValue(":score",scoreList);

//    //执行预处理命令
//    if(!query.execBatch()){
//        qDebug() << query.lastError();
//    }

    //遍历数据库
    query.exec("select * from student");
    while(query.next()){
        //一行一行遍历
        qDebug() << query.value(0).toInt()
                 << query.value(1).toString()
                 << query.value("age").toInt()
                 << query.value("score").toInt();
    }


}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_buttonDel_clicked()
{
    //获取编辑器内容
    QString name=ui->lineEdit->text();
    QString del=QString("delete from student where name = '%1';").arg(name);

    //开启一个事务
    QSqlDatabase::database().transaction();
    QSqlQuery query;
    query.exec(del);
}

void Widget::on_buttonQueDing_clicked()
{
    //确定删除
    QSqlDatabase::database().commit();
}

void Widget::on_buttonQuXiao_clicked()
{
    //撤销删除
    QSqlDatabase::database().rollback();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

private slots:
void on_buttonDel_clicked();

void on_buttonQueDing_clicked();

void on_buttonQuXiao_clicked();

private:
Ui::Widget *ui;
};

#endif // WIDGET_H

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐维康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值