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 }
原文地址:https://www.cnblogs.com/fuzhuoxin/p/12177324.html