Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
?
?
原理
演示及現(xiàn)象
?
原理
因為要對數(shù)據(jù)庫進行操作,然后用某個程序看現(xiàn)象,如果有一個進程,能對指定表中的所有數(shù)據(jù)進行批量修改,那么看現(xiàn)象將會多么的明顯啊!
個人感覺實現(xiàn)這種功能大體有兩種思路,一個是自己寫一個程序,這個程序不停的遍歷數(shù)據(jù)庫,查詢,修改。就像本博文的例子,另一種是用Mysql提供的,觸發(fā)器,存儲過程,存儲函數(shù),這類東西,進行修改,等會將會給出數(shù)據(jù)庫的例子;
?
演示及現(xiàn)象
程序運行截圖如下:
此時已經(jīng)點擊運行了!
查詢下修改的2張表!
另外一張表:
Qt程序結(jié)構(gòu)如下:
源碼如下:
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QSqlDatabase>QT_BEGIN_NAMESPACE class QSqlQuery; class QTimer; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic: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_Hmain.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("隨機修改數(shù)據(jù)庫中值");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中的數(shù)據(jù):
/* 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 */;?
?
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Qt工作笔记-Qt连接Mysql数据库,检索及修改表数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python笔记-内置装饰器
- 下一篇: MySQL工作笔记-编写存储过程批量添加