QT入门(十二)——数据库的基本操作


新建表,增删改查 登录 注册 删除 查询 显示数据库的表
关于增删改查的SQL语句在写代码的时候,一点点都不能写错!!!SQL语句写错了编译不会报错,但是运行就会有问题

在这里插入图片描述
在这里插入图片描述

新建表

#include "widget.h"
#include "ui_widget.h"
#include <QDialog>
#include <QMessageBox>
#include <QCryptographicHash>

//---------------表的头文件
#include <QApplication>

#include <QTableView>
#include <QHeaderView>
#include <QStandardItemModel>
#include <QTableWidget>
#include <QSqlQueryModel>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建一个库的流程
    //1.添加驱动.将数据库的名字传进去
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    //2.指定一个数据库文件的路径,就相当于新建一个文件夹,里面去存放东西
    db.setDatabaseName("user.db");
    //3.打开数据库
    //系统将user自动传入,返回一个布尔类型 打开成功返回true
    //判断打开是否成功
    if(!db.open())   //如果打开不成功
    {
        qDebug()<<"数据库打开失败";
    }

    //创建表格
    //先定义  访问的类
    QSqlQuery query;

    //创建一个叫user的表,一共有三个字段
    //(id ---------主键 自动增加(primary key),username----账号 不可以重复也不能为空(unique not null),password------密码(不为空))
    //引号里面是sql语句的固定格式  user是自定义的表名
    //integer 整数
    //ntext  字符串
    //unique not null 唯一并且不为空
    //exec返回值为布尔型,创建成功为true

    if(!query.exec("create table if not exists user(id integer primary key autoincrement,username ntext unique not NULL,password ntext not NULL)"))
    {
        qDebug()<<"创建表格失败!";
    }

}

Widget::~Widget()
{
    delete ui;
}

数据表的增加

注册用户

//注册  表格的插入操作
void Widget::on_pushButton_clicked()
{
    //先获取用户输入的账号和密码
    QString username = ui->ZHEdit->text();
    QString password = ui->MMEdit->text();

    //数据加密(加密完成后再加入数据库)
    //创建一个MD5加密的对象
    QCryptographicHash hash(QCryptographicHash::Md5);
    //放入原始数据--------------------
    hash.addData(password.toUtf8());
    //取出加密后的数据
    QByteArray arr = hash.result();
    //重新复制给passwor
    password = arr.toHex();
    //看一下加密后的数据
    qDebug()<<password;



    //插入表格
   //写出sql插入语句

    QString  sql = QString("insert into user(username,password) values('%1','%2')").arg(username).arg(password);
    QSqlQuery query;
    //query.exec(sql);


    if(query.exec(sql))
    {
        //如果返回值为true
        qDebug()<<"恭喜你,注册成功";

        //设置消息对话框
        int ret = QMessageBox::information(this,"注册","恭喜你,注册成功",QMessageBox::Ok,QMessageBox::Close);

        if (ret == QMessageBox::Ok)
            qDebug()<<"已退出注册成功窗口";

    }
    else
    {
        qDebug()<<"error!账号已被注册!";
        int ret = QMessageBox::information(this,"注册","error!账号已被注册!",QMessageBox::Ok,QMessageBox::Close);
        if (ret == QMessageBox::Ok)
            qDebug()<<"已退出注册窗口";
    }

}

表格的查询


//登录  表格的查询
void Widget::on_pushButton_2_clicked()
{
    //先获取用户输入的账号和密码
    QString username = ui->ZHEdit->text();
    QString password = ui->MMEdit->text();

    //数据加密(加密完成后再加入数据库)--------------------------------------------------
    //创建一个MD5加密的对象
    QCryptographicHash hash(QCryptographicHash::Md5);
    //放入原始数据
    hash.addData(password.toUtf8());
    //取出加密后的数据
    QByteArray arr = hash.result();
    //重新复制给passwor
    password = arr.toHex();
    //看一下加密后的数据
    qDebug()<<password;
    //---------------------------------------------------------------------------------

    //在表格中进行查找
   //写出sql的查找语句
    QString sql = QString("select * from user where username='%1' and password='%2'").arg(username).arg(password);
    QSqlQuery query(sql);//自动执行
    //发返回值判断
    if(query.next())
    {
        //设置消息对话框
        int ret = QMessageBox::information(this,"登录","恭喜你,登录成功",QMessageBox::Ok,QMessageBox::Close);

        if (ret == QMessageBox::Ok)
            qDebug()<<"已退出登录成功窗口";
        //如果返回值为true
        qDebug()<<"登录成功";
    }
    else
    {
        //设置消息对话框
        int ret = QMessageBox::information(this,"注册","账号密码不一致,或账号未注册",QMessageBox::Ok,QMessageBox::Close);

        if (ret == QMessageBox::Ok)
            qDebug()<<"已退出登录成功窗口";
        qDebug()<<"账号密码不一致,或账号未注册";
    }

}

根据输入的条件查询

//查找
void Widget::on_pushButton_4_clicked()
{
    QString chazhaousername = ui->chazhaoEdit->text();
    QString sql = QString("SELECT * FROM user WHERE username=%1;").arg(chazhaousername);
    QSqlQuery query(sql);//自动执行


        if(query.next())
        {
            QString id = query.value(0).toString();
            QString username = query.value(1).toString();
            QString password = query.value(2).toString();

            qDebug()<<id<<username<<password;

                //设置消息对话框
                QMessageBox::information(this,"查找",QString("您输入的账户存在,编号为'%1'").arg(id),QMessageBox::Ok,QMessageBox::Close);
        }
        else
        {
            //设置消息对话框
            QMessageBox::information(this,"查找","您输入的账户不存在",QMessageBox::Ok,QMessageBox::Close);
        }

}

表的删除

//删除
void Widget::on_pushButton_3_clicked()
{
    QString del = ui->shanchuEdit->text();
    //-------------%1这里不要加''单引号,因为del就是一个字符串,本身就是带单引号的,要是外面再加一层单引号的话,格式就不对了
    QString sql = QString("DELETE FROM user WHERE username=%1").arg(del);
    QSqlQuery query;//自动执行


        if(query.exec(sql))
        {
            //设置消息对话框
            QMessageBox::information(this,"删除","删除成功",QMessageBox::Ok,QMessageBox::Close);
        }
        else
        {
            //设置消息对话框
            QMessageBox::information(this,"删除","删除失败",QMessageBox::Ok,QMessageBox::Close);
        }
}

修改

//修改账号
void Widget::on_pushButton_6_clicked()
{
    QString oldusername = ui->oldid->text();
    QString newusername = ui->newid->text();
    QString newpassword = ui->newpassword->text();

    //数据加密(加密完成后再加入数据库)--------------------------------------------------
    //创建一个MD5加密的对象
    QCryptographicHash hash(QCryptographicHash::Md5);
    //放入原始数据
    hash.addData(newpassword.toUtf8());
    //取出加密后的数据
    QByteArray arr = hash.result();
    //重新复制给passwor
    newpassword = arr.toHex();

    QString sql = QString("update user set username='%1',password='%2' where username='%3'").arg(newusername).arg(newpassword).arg(oldusername);
    //QString sql = QString("update user set username='%1 where username='%3'").arg(newusername).arg(oldusername);

    QSqlQuery query;//自动执行
    if(query.exec(sql))
       // QSqlQuery query(sql);//自动执行
       // if(query.next())
    {

            //设置消息对话框
            QMessageBox::information(this,"修改",QString("修改成功"),QMessageBox::Ok,QMessageBox::Close);
    }
    else
    {
        //设置消息对话框
        QMessageBox::information(this,"修改","修改失败",QMessageBox::Ok,QMessageBox::Close);
    }


}

显示所有注册用户的信息

//显示所有注册用户的信息
void Widget::on_pushButton_5_clicked()
{

//    QSqlQuery query;
//        int row =0;
//        //int columns = 0;
//        //初始化行数
//        QString sql = QString("select count(*) as row from user");
//        query.exec(sql);
//        if(query.first())
//        {
//            row =  query.value("row").toInt();
//            ui->tableWidget->setRowCount(row);
//        }
//        //初始化列数(mysql中存在一个information_schema这个数据库,存放各个表的信息)

//            ui->tableWidget->setColumnCount(2);//列

//            ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"id"<<"username"); //设置行头

//            QString sql1 = QString("SELECT * FROM user");
//            QSqlQuery query1(sql1);//自动执行


//            for(int i =0;query1.next();i++)
//               {

//                    QString id = query.value(0).toString();
//                    QString username = query.value(1).toString();


//                    qDebug()<<id<<username;
//                     ui->tableWidget->setItem(i,0,new QTableWidgetItem(id)); //设置表格内容
//                     ui->tableWidget->setItem(i,1,new QTableWidgetItem(username)); //设置表格内容

//                }
            static QSqlQueryModel *mode= new QSqlQueryModel(ui->tableView);
                mode->setQuery("select * from user");
                mode->setHeaderData(0,Qt::Horizontal,tr("id"));//设置表头
                mode->setHeaderData(1, Qt::Horizontal, tr("username"));
                ui->tableView->setModel(mode);

}

涉及到一个数据模型
注释掉的内容是另一种显示方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值