zoukankan      html  css  js  c++  java
  • Qt中MySQL数据库的操作例程

      数据库连接不成功时,要将libmysql.dll放到C:QtQt5.11.05.11.0mingw53_32in和C:QtQt5.11.05.11.0msvc2017_64in下面

    .h文件

     1 #ifndef MYWIDGET_H
     2 #define MYWIDGET_H
     3 
     4 #include <QWidget>
     5 #include <QSqlDatabase>
     6 #include <QDebug>
     7 #include <QMessageBox>
     8 #include <QSqlError>
     9 #include <QSqlQuery>
    10 #include <QVariantList>
    11 
    12 namespace Ui {
    13 class MyWidget;
    14 }
    15 
    16 class MyWidget : public QWidget
    17 {
    18     Q_OBJECT
    19 
    20 public:
    21     explicit MyWidget(QWidget *parent = 0);
    22     ~MyWidget();
    23 
    24 private slots:
    25     void on_sureButton_clicked();
    26 
    27     void on_cancelButton_clicked();
    28 
    29     void on_delButton_clicked();
    30 
    31 private:
    32     Ui::MyWidget *ui;
    33     QSqlDatabase mySqldata;
    34 
    35 };
    36 
    37 #endif // MYWIDGET_H

    .cpp实现文件

      1 #include "mywidget.h"
      2 #include "ui_mywidget.h"
      3 
      4 MyWidget::MyWidget(QWidget *parent) :
      5     QWidget(parent),
      6     ui(new Ui::MyWidget)
      7 {
      8     ui->setupUi(this);
      9 
     10     qDebug() << QSqlDatabase::drivers();//查询支持的数据库类型
     11 /******************************************对数据库中的fzx数据库进行操作*************************************************/
     12 /******************************************对数据库中的fzx数据库进行操作*************************************************/
     13     mySqldata = QSqlDatabase::addDatabase("QMYSQL","a");//添加MySQL数据库
     14     mySqldata.setHostName("127.0.0.1");
     15     mySqldata.setPort(3306);
     16     mySqldata.setUserName("root");
     17     mySqldata.setPassword("FZX13752228127");
     18     mySqldata.setDatabaseName("fzx");
     19     mySqldata.open();
     20     if(!mySqldata.open())
     21     {
     22         QMessageBox::warning(this,"错误",mySqldata.lastError().text());
     23         return;
     24     }
     25     QSqlQuery query(mySqldata);//绑定要访问的数据库
     26     query.exec(" create table student(id int primary key auto_increment, name varchar(255), age int, score int);");
     27     //插入单条数据
     28     query.exec(" insert into student(id, name, age, score) values(1, 'mike', 18, 76);");
     29     //批量插入数据
     30 /**************************obdc风格批量插入数据********************************************************************
     31 
     32     //预处理语句
     33             query.prepare(" insert into student(name, age, score) values(?, ?, ?);");
     34         //给字段设置内容 list
     35             QVariantList nameList,ageList, scoreList;
     36             nameList << "张三" << "李四" << "王五";
     37             ageList <<11 <<45 <<66;
     38             scoreList << 59 << 69 << 79;
     39         //给字段绑定相应的值,按顺序绑定;id号自动添加
     40             query.addBindValue(nameList);
     41             query.addBindValue(ageList);
     42             query.addBindValue(scoreList);
     43         //执行预处理命令
     44             query.execBatch();
     45 *************************************************obdc风格批量插入数据**************************************************/
     46 
     47 
     48 
     49 /*********************************************oracle风格批量插入数据***************************************************/
     50 
     51     //预处理语句:占位符: +自定义名字
     52             query.prepare(" insert into student(name, age, score) values(:name, :age, :score);");
     53     //给字段设置内容 list
     54             QVariantList nameList,ageList, scoreList;
     55             nameList << "小米" << "华为" << "三星";
     56             ageList <<33 <<43 <<55;
     57             scoreList << 59 << 69 << 100;
     58     //给字段绑定(可以不按照顺序,有占位符: +自定义名字)
     59             query.bindValue(":name",nameList);
     60             query.bindValue(":age",ageList);
     61             query.bindValue(":score",scoreList);
     62     //执行预处理命令
     63             query.execBatch();
     64 
     65 /***********************************************oracle风格批量插入数据*************************************************/
     66 
     67     //查找数据
     68             //query.exec("select * from student");//从表中遍历每一行
     69             query.exec("select * from student where name = '华为'");//从表中遍历name为华为的行
     70             while(query.next())//一行一行遍历
     71             {
     72                //取出当前行的内容,取得时候按列来取
     73                 qDebug() << query.value(0).toInt()
     74                             << query.value(1).toString()
     75                                << query.value("age").toInt()
     76                                   << query.value("score").toInt();
     77 
     78             }
     79     //更新数据
     80             query.exec("update student set score = 100 where name = '华为'");
     81 /******************************************对数据库中的fzx数据库进行操作*************************************************/
     82 /******************************************对数据库中的fzx数据库进行操作*************************************************/
     83 
     84 
     85 
     86 /******************************************对数据库中的test数据库进行操作*************************************************/
     87 /******************************************对数据库中的test数据库进行操作**************************************************
     88     QSqlDatabase mySqldatab = QSqlDatabase::addDatabase("QMYSQL","b");//添加MySQL数据库
     89     mySqldatab.setHostName("127.0.0.1");
     90     mySqldatab.setPort(3306);
     91     mySqldatab.setUserName("root");
     92     mySqldatab.setPassword("FZX13752228127");
     93     mySqldatab.setDatabaseName("test");
     94     mySqldatab.open();
     95     if(!mySqldatab.open())
     96     {
     97         QMessageBox::warning(this,"错误",mySqldatab.lastError().text());
     98         return;
     99     }
    100     QSqlQuery queryb(mySqldatab);//绑定要访问的数据库("QMYSQL","b")中的b与a区分开了fzx和test两个数据库
    101     queryb.exec(" create table teacher(id int primary key auto_increment, name varchar(255), age int, salary float);");
    102 
    103 ******************************************对数据库中的test数据库进行操作**************************************************/
    104 /******************************************对数据库中的test数据库进行操作*************************************************/
    105 }
    106 
    107 MyWidget::~MyWidget()
    108 {
    109     delete ui;
    110 }
    111 
    112 void MyWidget::on_sureButton_clicked()
    113 {
    114 
    115     QString name = ui->lineEdit->text();
    116     QString delsql = QString("delete from student where name = '%1'").arg(name);//注意里面最后不带;号
    117     //开启一个事务
    118     QSqlDatabase::database().transaction();
    119     QSqlQuery query(mySqldata);//绑定要访问的数据库
    120     query.exec(delsql);
    121 
    122 }
    123 void MyWidget::on_delButton_clicked()
    124 {
    125     //执行删除
    126     QSqlDatabase::database().commit();
    127 }
    128 void MyWidget::on_cancelButton_clicked()
    129 {
    130     //回撤取消删除
    131     QSqlDatabase::database().rollback();
    132 }
  • 相关阅读:
    unity free asset
    Unity3d Serialize问题
    野蛮能带来繁荣是怎么回事?
    如何给unity3d工程加入依赖的android工程
    unity3d 导入google play services插件工程
    NGUI中UILabel使用url标签的一个bug
    数据结构
    git命令
    面试算法经典问题
    Http Client 源码分析
  • 原文地址:https://www.cnblogs.com/fuzhuoxin/p/12177324.html
Copyright © 2011-2022 走看看