树莓派3B使用Qt+MySQL创建、写入、修改、显示数据(7)

1、创建qt工程

创建方法与此文相同:
树莓派3B+Qt Creator图形界面编程

2、创建数据库表单并写入数据

MySQL账户、数据库创建见此文:
树莓派3B&MySQL-学习使用笔记
以下内容使用经上述方法建立好了的账户和数据库
在建立好的qt工程里,在.Pro文件加入代码:

QT		+= core gui sql

在这里插入图片描述
在mainwindow.cpp加入头文件:

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>

在这里插入图片描述
在ui->setupUi(this);后面加上以下代码:
在这里插入图片描述

    qDebug()<<QSqlDatabase::drivers();
    qDebug()<<QCoreApplication::libraryPaths();//数据库驱动的文件位置
    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");//QMYSQL是采用QMYSQL数据库驱动
    db.setHostName("127.0.0.1");
    db.setUserName("noel"); //数据库账号
    db.setPassword("123456");//数据库密码
    db.setDatabaseName("noeldb"); //你的数据库名
    if(!db.open()){
    qDebug()<<"连接数据库失败";
    return;
    }else{
    qDebug()<<"连接数据库成功";
    QSqlQuery query;
	//drop table student_lx作用是删除表单student_lx
	//为了调试的时候,每次重新运行数据不会在上一次数据基础上追加,不然多运行几次,数据就太多了
    query.exec("drop table student_lx;");
	//创建表单student_lx,并定义数据格式
    query.exec("create table student_lx(id int primary key auto_increment, name varchar(255), age int, score int);");
	//插入一个数据
    query.exec("insert into student_lx(id, name, age, score) values(1, 'mike', 18, 59);");

//        批量插入  odbc风格
//        预处理语句 ?相当于占位符
    query.prepare("insert into student_lx( name, age, score) values(?,?,?);");
    //给字段设置内容 list
    QVariantList nameList;
    QVariantList ageList;
    QVariantList scoreList;
    nameList<<"xiaoming"<<"xiaolong"<<"xiaojiang";
    ageList<<11<<22<<33;
    scoreList<<59<<69<<79;
    //给字段绑定相应的值,按顺序绑定
    query.addBindValue(nameList);
    query.addBindValue(ageList);
    query.addBindValue(scoreList);

   // oracle风格
    query.prepare("insert into student_lx( name, age, score) values(:name,:age,:score);");
    //QVariantList nameList;
    //QVariantList ageList;
    //QVariantList scoreList;
    nameList<<"xiaoa"<<"xiaob"<<"xiaoc";
    ageList<<33<<44<<55;
    scoreList<<89<<90<<100;
    //给字段绑定
    query.bindValue(":name",nameList);
    query.bindValue(":score",scoreList);
    query.bindValue(":age",ageList);
   //写入数据
    query.execBatch();
    //更改id为3的score为90
    query.exec("update student_lx set score = 90 where id = 3;");
    //显示
    query.exec("select*from student_lx where name = 'xiaoming';");
    while(query.next()){  //显示xiaoming
        //取出当前行的内容
       qDebug()<<query.value(0).toInt()
           <<query.value(1).toString()
           <<query.value("age").toInt()
           <<query.value("score").toInt();
    }

    query.exec("select*from student_lx");
        while(query.next()){  //一行一行遍历
            //取出当前行的内容
           qDebug()<<query.value(0).toInt()
               <<query.value(1).toString()
               <<query.value("age").toInt()
               <<query.value("score").toInt();
        }

    }

一些说明:
1、编译运行后如果出现以下错误:QMYSQL driver not loaded
在这里插入图片描述
打开shell,输入以下命令:

sudo  apt-get install  libqt5sql5-mysql

安装可能出现问题,没出现就不管:
在这里插入图片描述
这时候先将mysql停掉,并再输入前面的命令:

sudo service mysql stop 
sudo  apt-get install  libqt5sql5-mysql

还不行就:

sudo apt-get update
sudo  apt-get install  libqt5sql5-mysql

要是还不行,在下无能为力,砸树莓派吧。
成功安装后如下:
在这里插入图片描述
完成后,停掉了mysql的朋友记得开mysql服务:

sudo service mysql start

回qt重新编译。
2、上面的账户(noel)、密码(123456)、数据库名(noeldb),是之前设置好的,如果没设置,见此文:
树莓派3B&MySQL-学习使用笔记
如果前面步骤是和账户、密码、数据库名是正确设置的,那么编译运行后,在这里可以看到结果:
在这里插入图片描述
如果数据库连接失败,请检查账户密码等,还有前面的步骤

3、运行结果:
因为mike是最先单独插入的数据,所以mike的id是1,到后面显示的时候,先是只显示了xiaoming的数据,所以xiaoming在第一个位置
在这里插入图片描述
用shell命令查看已经写入的表单:

//noel是你创建的账户
sudo mysql -u noel -p
//输密码
//noeldb是数据库名
use noeldb
//显示表单内容,student_lx是要显示的表单名
select *from student_lx

在这里插入图片描述

3、删除键盘输入对象的数据

双击mainwindow.ui设计界面:
在这里插入图片描述
加入三个按键(push button),一个文本标签(label),一个文本编辑框(line edit)
按钮改名字和ID:
选中按钮,双击修改按钮显示的文字为delete,右边的属性里面修改objectname为ButtonDel,其他按钮同理,另外两个名字分别为ButtonSure,ButtonCancel(其实改不改无所谓,只是方便管理和查看时一眼知道这个键是干嘛的)
在这里插入图片描述
并为三个按钮添加点击响应函数,方法见此文:
树莓派3B+Qt Creator图形界面编程
本文多了一个line edit而已,界面如下图:
在这里插入图片描述
接着在mainwindow.cpp里面,找到刚自动添加的三个点击事件响应函数,分别添加以下代码:
在这里插入图片描述
运行:
在对话框出现以后,在shell里面查看表单数据,查看方法见:树莓派3B&MySQL-学习使用笔记
在对话框输入xiaoa,点击delete,再点击confirm
回到shell,再次查看表单数据,xiaoa已经被删除了
在这里插入图片描述

4、静态数据库,插入数据并显示

不需要账户密码,自己建立一个info.db文件就行
之前在ui->setupUi(this);后面加入的代码注释掉或者删除,加入以下代码:

    //静态数据库
    //打印QT支持的数据库驱动
    qDebug()<<QSqlDatabase::drivers();

    //添加MYSQL数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //数据库对象
    //设置数据库
    //自己找个记得住的路径建立info.db文件,路径复制到这里
    db.setDatabaseName("/home/pi/qtproject/info.db");
    //打开数据库
    if( !db.open() ){ //数据库打开失败
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }

    QSqlQuery query;
    query.exec("create table student_lx(id int primary key, name varchar(255), age int, score int);");

     // ?相当于占位符
    query.prepare("insert into student_lx( name, age, score) values(?,?,?);");
    //给字段设置内容 list
    QVariantList nameList;
    nameList<<"xiaoming"<<"xiaolong"<<"xiaojiang";
    QVariantList ageList;
    ageList<<11<<22<<33;
    QVariantList scoreList;
    scoreList<<59<<69<<79;
    //给字段绑定相应的值,按顺序绑定
    query.addBindValue(nameList);
    query.addBindValue(ageList);
    query.addBindValue(scoreList);
    //执行预处理命令
    query.execBatch();

    query.exec("select*from student_lx;");
     while(query.next()){  //一行一行遍历
         //取出当前行的内容
        qDebug()<<query.value(0).toInt()
            <<query.value(1).toString()
            <<query.value("age").toInt()
            <<query.value("score").toInt();
     }

结果:
在这里插入图片描述

--------------------------------------------------------------------------------------------诺有缸的高飞鸟202005

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诺有缸的高飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值