Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据

目录

 

 

原理

演示及现象


 

原理

因为要对数据库进行操作,然后用某个程序看现象,如果有一个进程,能对指定表中的所有数据进行批量修改,那么看现象将会多么的明显啊!

个人感觉实现这种功能大体有两种思路,一个是自己写一个程序,这个程序不停的遍历数据库,查询,修改。就像本博文的例子,另一种是用Mysql提供的,触发器,存储过程,存储函数,这类东西,进行修改,等会将会给出数据库的例子;

 

演示及现象

程序运行截图如下:

此时已经点击运行了!

查询下修改的2张表!

Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据_第1张图片

另外一张表:

Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据_第2张图片

Qt程序结构如下:

Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据_第3张图片

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 

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 

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 
#include 
#include 
#include 

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 @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@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 SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

 

 

你可能感兴趣的:(C/C++,Qt,工作笔记)