数据库
首页 > 数据库> > Qt + 数据库连接+插入+删除+遍历

Qt + 数据库连接+插入+删除+遍历

作者:互联网

项目工程目录:

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("creat 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("creat 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.addBindValue(":name",nameList);
    query2.addBindValue(":score",scoreList);
    query2.addBindValue(":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:

 

标签:遍历,clicked,Qt,database,数据库,ui,mywidget,include,MyWidget
来源: https://www.cnblogs.com/doker/p/11175405.html