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