Qt中MySQL数据库的操作例程
2024-09-06 20:07:58
数据库连接不成功时,要将libmysql.dll放到C:\Qt\Qt5.11.0\5.11.0\mingw53_32\bin和C:\Qt\Qt5.11.0\5.11.0\msvc2017_64\bin下面
.h文件
#ifndef MYWIDGET_H
#define MYWIDGET_H #include <QWidget>
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList> namespace Ui {
class MyWidget;
} class MyWidget : public QWidget
{
Q_OBJECT public:
explicit MyWidget(QWidget *parent = );
~MyWidget(); private slots:
void on_sureButton_clicked(); void on_cancelButton_clicked(); void on_delButton_clicked(); private:
Ui::MyWidget *ui;
QSqlDatabase mySqldata; }; #endif // MYWIDGET_H
.cpp实现文件
#include "mywidget.h"
#include "ui_mywidget.h" MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this); qDebug() << QSqlDatabase::drivers();//查询支持的数据库类型
/******************************************对数据库中的fzx数据库进行操作*************************************************/
/******************************************对数据库中的fzx数据库进行操作*************************************************/
mySqldata = QSqlDatabase::addDatabase("QMYSQL","a");//添加MySQL数据库
mySqldata.setHostName("127.0.0.1");
mySqldata.setPort();
mySqldata.setUserName("root");
mySqldata.setPassword("FZX13752228127");
mySqldata.setDatabaseName("fzx");
mySqldata.open();
if(!mySqldata.open())
{
QMessageBox::warning(this,"错误",mySqldata.lastError().text());
return;
}
QSqlQuery query(mySqldata);//绑定要访问的数据库
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, 'mike', 18, 76);");
//批量插入数据
/**************************obdc风格批量插入数据******************************************************************** //预处理语句
query.prepare(" insert into student(name, age, score) values(?, ?, ?);");
//给字段设置内容 list
QVariantList nameList,ageList, scoreList;
nameList << "张三" << "李四" << "王五";
ageList <<11 <<45 <<66;
scoreList << 59 << 69 << 79;
//给字段绑定相应的值,按顺序绑定;id号自动添加
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);
//执行预处理命令
query.execBatch();
*************************************************obdc风格批量插入数据**************************************************/ /*********************************************oracle风格批量插入数据***************************************************/ //预处理语句:占位符: +自定义名字
query.prepare(" insert into student(name, age, score) values(:name, :age, :score);");
//给字段设置内容 list
QVariantList nameList,ageList, scoreList;
nameList << "小米" << "华为" << "三星";
ageList << << <<;
scoreList << << << ;
//给字段绑定(可以不按照顺序,有占位符: +自定义名字)
query.bindValue(":name",nameList);
query.bindValue(":age",ageList);
query.bindValue(":score",scoreList);
//执行预处理命令
query.execBatch(); /***********************************************oracle风格批量插入数据*************************************************/ //查找数据
//query.exec("select * from student");//从表中遍历每一行
query.exec("select * from student where name = '华为'");//从表中遍历name为华为的行
while(query.next())//一行一行遍历
{
//取出当前行的内容,取得时候按列来取
qDebug() << query.value().toInt()
<< query.value().toString()
<< query.value("age").toInt()
<< query.value("score").toInt(); }
//更新数据
query.exec("update student set score = 100 where name = '华为'");
/******************************************对数据库中的fzx数据库进行操作*************************************************/
/******************************************对数据库中的fzx数据库进行操作*************************************************/ /******************************************对数据库中的test数据库进行操作*************************************************/
/******************************************对数据库中的test数据库进行操作**************************************************
QSqlDatabase mySqldatab = QSqlDatabase::addDatabase("QMYSQL","b");//添加MySQL数据库
mySqldatab.setHostName("127.0.0.1");
mySqldatab.setPort(3306);
mySqldatab.setUserName("root");
mySqldatab.setPassword("FZX13752228127");
mySqldatab.setDatabaseName("test");
mySqldatab.open();
if(!mySqldatab.open())
{
QMessageBox::warning(this,"错误",mySqldatab.lastError().text());
return;
}
QSqlQuery queryb(mySqldatab);//绑定要访问的数据库("QMYSQL","b")中的b与a区分开了fzx和test两个数据库
queryb.exec(" create table teacher(id int primary key auto_increment, name varchar(255), age int, salary float);"); ******************************************对数据库中的test数据库进行操作**************************************************/
/******************************************对数据库中的test数据库进行操作*************************************************/
} MyWidget::~MyWidget()
{
delete ui;
} void MyWidget::on_sureButton_clicked()
{ QString name = ui->lineEdit->text();
QString delsql = QString("delete from student where name = '%1'").arg(name);//注意里面最后不带;号
//开启一个事务
QSqlDatabase::database().transaction();
QSqlQuery query(mySqldata);//绑定要访问的数据库
query.exec(delsql); }
void MyWidget::on_delButton_clicked()
{
//执行删除
QSqlDatabase::database().commit();
}
void MyWidget::on_cancelButton_clicked()
{
//回撤取消删除
QSqlDatabase::database().rollback();
}
最新文章
- [Cordova] Plugin开发架构
- 栈的理解以及如何计算程序所需栈的大小并在IAR中设置栈
- 数据结构图文解析之:二叉堆详解及C++模板实现
- 帕雷托最优(Pareto optimality)、帕雷托效率(Pareto efficiency)
- asp.net mvc Post上传文件大小限制
- opengl绘制正弦曲线
- svg琐碎01
- java基础:数据类型
- 【转】iOS开发UI篇—iPad和iPhone开发的比较
- centos安装postfixadmin
- 【HDOJ】1254 推箱子
- 数据库(学习整理)----1--如何彻底清除系统中Oracle的痕迹(重装Oracle时)
- POJ 3436 ACM Computer Factory
- B - Frogger
- smarty模板执行原理
- loadrunner 日志
- .net remoting 实现通用消息处理窗口
- Eclipse使用Maven创建Web项目+整合SSM框架
- ReactNative学习之Html基本标签使用
- 【Weblogic】在linux创建domain过慢的解决方法