数据库连接不成功时,要将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 }
来源:https://www.cnblogs.com/fuzhuoxin/p/12177324.html