Qt + 數據庫連接+插入+刪除+遍歷


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM