在使用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:

