数据库连接不成功时,要将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 }