Qt中MySQL數據庫的操作例程


  數據庫連接不成功時,要將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文件

 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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM