在使用SQL語句的時候,先在識別SQL語句的環境中寫好,再復制過去,之前就因為create 少寫了個字母,查了近半小時的時間,才查出來。
項目工程目錄:
database.pro
#------------------------------------------------- # # Project created by QtCreator 2019-07-12T07:31:08 # #------------------------------------------------- QT += core gui sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = 01_database TEMPLATE = app SOURCES += main.cpp\ mywidget.cpp HEADERS += mywidget.h FORMS += mywidget.ui
mywidget.h:
#ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> namespace Ui { class MyWidget; } class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); ~MyWidget(); private slots: void on_buttonDelete_clicked(); void on_buttonSure_clicked(); void on_buttonCancel_clicked(); private: Ui::MyWidget *ui; }; #endif // MYWIDGET_H
mywidget.cpp:
#include "mywidget.h" #include "ui_mywidget.h" #include <QSqlDatabase> #include <QDebug> #include <QMessageBox> #include <QSqlError> #include <QSqlQuery>//專門對SQL語句操作的類 #include <QVariantList> MyWidget::MyWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MyWidget) { ui->setupUi(this); //打印Qt支持的數據庫驅動 qDebug()<<QSqlDatabase::drivers(); //添加MySql數據庫 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //連接數據庫 db.setHostName("127.0.0.1");//數據庫服務器IP db.setUserName("root");//數據庫用戶名 db.setPassword("123");//密碼 db.setDatabaseName("studentmanager");//使用哪個數據庫 //打開數據庫 只有打開數據庫才能進行下面的操作: 增 刪 改 查 if(db.open() == false) { QMessageBox::warning(this,"錯誤",db.lastError().text()); return; } /* QSqlQuery query; query.exec("create table student(id int primary key auto_increment,name varchar(255) ,age int ,score int )");//這里添加SQL語句創建表 */ #if 0 /*當存在添加多個庫的時候, * */ QSqlDatabase db1 = QSqlDatabase::addDatabase("QMYSQL","a"); //連接數據庫 db.setHostName("127.0.0.1");//數據庫服務器IP db.setUserName("root");//數據庫用戶名 db.setPassword("123");//密碼 db.setDatabaseName("text");//使用哪個數據庫 //打開數據庫 if(db.open() == false) { QMessageBox::warning(this,"錯誤",db.lastError().text()); return; } QSqlQuery query1(db1);//將db1傳進query query1.exec("create table student(id int primary key auto_increment,name varchar(255) ,age int ,score int )");//創建表 #endif //插入 QSqlQuery query; query.exec("insert into student(id ,name, age,score) values (1,'mike',18,59);"); /*批量插入 ,有兩種風格*/ #if 0 //odbc風格 //1、預處理語句 ?相當於占位符(此時還不知道里面要填什么內容,先占位置) QSqlQuery query1; query1.prepare("insert into student(name, age,score) values (?,?,? );"); //給字段設置內容 list QVariantList nameList; nameList <<"xiaoming "<<"xiaohong"<<"xiaojiang"; QVariantList ageList; ageList <<11<<22<<33; QVariantList scoreList; scoreList<<59<<69<<79; //給字段綁定相應的值 按順序綁定(否則會出錯) query1.addBindValue(nameList); query1.addBindValue(ageList); query1.addBindValue(scoreList); //執行預處理命令 query1.execBatch(); #endif #if 0 //oracle 風格 //占位符 : + 自定義名字 QSqlQuery query2; query2.prepare("insert into student(name, age,score) values (:name,:age,:score );"); //給字段設置內容 list QVariantList nameList; nameList <<"xiao1 "<<"xiao2"<<"xiao3"; QVariantList ageList; ageList <<12<<22<<32; QVariantList scoreList; scoreList<<52<<62<<72; //給字段綁定 這里就沒有順序了 query2.bindValue(":name",nameList); query2.bindValue(":score",scoreList); query2.bindValue(":age",ageList); //執行預處理命令 query1.execBatch(); #endif /*查找元素 */ QSqlQuery query4; query4.exec("select * from student"); //query4.exec("select * from student where name = "xiao1");//選擇確定的某一個人 while(query4.next())//一行一行的遍歷 { //取出當前行的內容 qDebug()<<query4.value(0).toInt() <<query4.value(1).toString() <<query4.value("age").toInt() <<query4.value("score").toInt(); } } MyWidget::~MyWidget() { delete ui; } //刪除按鈕 void MyWidget::on_buttonDelete_clicked() { //獲取編輯區的內容 QString name = ui->lineEdit->text(); QString str = QString("delete from student where name = '%1';").arg(name);//刪除數據庫語句:delete from student where name = 'mike'; //開啟一個事務 通過database()函數可以確定操作哪一個數據庫 QSqlDatabase::database().transaction(); QSqlDatabase query3; query3.exec(str); } //確定刪除 void MyWidget::on_buttonSure_clicked() { //確定刪除 QSqlDatabase::database().commit(); } void MyWidget::on_buttonCancel_clicked() { //回滾,撤銷 QSqlDatabase::database().rollback(); }
mywidget.ui: