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:

 

转载于:https://www.cnblogs.com/doker/p/11175405.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值