Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据
目录
原理
因为要对数据库进行操作,然后用某个程序看现象,如果有一个进程,能对指定表中的所有数据进行批量修改,那么看现象将会多么的明显啊!
个人感觉实现这种功能大体有两种思路,一个是自己写一个程序,这个程序不停的遍历数据库,查询,修改。就像本博文的例子,另一种是用Mysql提供的,触发器,存储过程,存储函数,这类东西,进行修改,等会将会给出数据库的例子;
演示及现象
程序运行截图如下:
此时已经点击运行了!
查询下修改的2张表!
另外一张表:
Qt程序结构如下:
源码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlDatabase>
QT_BEGIN_NAMESPACE
class QSqlQuery;
class QTimer;
QT_END_NAMESPACE
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
bool connectMySQL();
void upateMySQL();
QStringList selectAppropriateData(const QString &cmd);
protected slots:
void btnClicked();
void sqlDataTimeout();
private:
Ui::Widget *ui;
QSqlDatabase m_db;
QSqlQuery *m_query;
QTimer *m_timer;
bool m_isRun;
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QSqlQuery>
#include <QDebug>
#include <QTimer>
#include <QTime>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_isRun = false;
connectMySQL();
m_timer = new QTimer(this);
this->setWindowTitle("随机修改数据库中值");
connect(m_timer, SIGNAL(timeout()), this, SLOT(sqlDataTimeout()));
connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(btnClicked()));
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
}
Widget::~Widget()
{
delete ui;
delete m_query;
}
bool Widget::connectMySQL()
{
m_db = QSqlDatabase::addDatabase("QMYSQL");
m_query = new QSqlQuery(m_db);
m_db.setHostName("127.0.0.1");
m_db.setPort(3306);
m_db.setDatabaseName("mysql");
m_db.setUserName("root");
m_db.setPassword("root");
if(!m_db.open()){
qDebug() << "error";
return false;
}
return true;
}
void Widget::upateMySQL()
{
m_timer->start(1000);
}
QStringList Widget::selectAppropriateData(const QString &cmd)
{
QStringList list;
if(!m_query->exec(cmd) || m_query->size() == 0){
return list;
}
while(m_query->next()){
list << m_query->value(0).toString();
}
return list;
}
void Widget::btnClicked()
{
if(!m_isRun){
upateMySQL();
ui->pushButton->setText("停止");
}
else{
ui->pushButton->setText("开始");
m_timer->stop();
}
m_isRun = !m_isRun;
}
void Widget::sqlDataTimeout()
{
QStringList list = selectAppropriateData("select idval from sourcenetload.datasample");
//更新每一个
for(int i = 0; i < list.size(); i++){
int numData = qrand()%655350;
QString valueDataStr = QString("update sourcenetload.datasample set value=%1 where idval=%2").arg(QString::number(numData)).arg(list[i]);
//qDebug() << valueDataStr;
m_query->exec(valueDataStr);
}
list = selectAppropriateData("select id from sourcenetload.circle");
//更新每一个
for(int i = 0; i < list.size(); i++){
int numData = qrand()%2;
QString valueDataStr = QString("update sourcenetload.circle set isRun=%1 where id=%2").arg(QString::number(numData)).arg(list[i]);
//qDebug() << valueDataStr;
m_query->exec(valueDataStr);
}
}
MySQL中的数据:
/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.5.47 : Database - sourcenetload
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`sourcenetload` /*!40100 DEFAULT CHARACTER SET gbk */;
USE `sourcenetload`;
/*Table structure for table `circle` */
DROP TABLE IF EXISTS `circle`;
CREATE TABLE `circle` (
`id` int(11) NOT NULL,
`isRun` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
/*Data for the table `circle` */
insert into `circle`(`id`,`isRun`) values (0,0),(1,1);
/*Table structure for table `data` */
DROP TABLE IF EXISTS `data`;
CREATE TABLE `data` (
`data` double NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
/*Data for the table `data` */
insert into `data`(`data`) values (111.111),(22111111);
/*Table structure for table `datasample` */
DROP TABLE IF EXISTS `datasample`;
CREATE TABLE `datasample` (
`idval` bigint(20) NOT NULL,
`value` float DEFAULT NULL,
PRIMARY KEY (`idval`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
/*Data for the table `datasample` */
insert into `datasample`(`idval`,`value`) values (1,8516),(2,25708),(7,25457),(5,11610),(6,31384),(3,2811),(4,27108),(8,12509),(9,929),(0,5019);
/*!40101 SET [email protected]_SQL_MODE */;
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */;
/*!40014 SET [email protected]_UNIQUE_CHECKS */;
/*!40111 SET [email protected]_SQL_NOTES */;