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