QT中的数据库操作

文章详细介绍了如何在Qt应用程序中使用QSqlDatabase进行SQLite数据库的连接、检查、创建表、插入记录以及执行SQL查询的操作,包括使用不同方式执行插入和删除操作并处理可能出现的错误。
摘要由CSDN通过智能技术生成
#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QDebug>
#include <QSqlError>
#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget),db_file("student.db")
{
    ui->setupUi(this);
    QFile file(db_file);
    bool isDbFileExists = false;
    if(file.exists()){
        isDbFileExists = true;
        qDebug()<<"数据库文件"<<db_file<<"已经存在";
    }
    else{
        qDebug()<<"数据库文件"<<db_file<<"不存在";

    }
      //可指定连接的名称
    //addDatabase内可以添加第二个参数 
    db_student = QSqlDatabase :: addDatabase("QSQLITE");
    db_student.setDatabaseName(db_file);

    if(db_student.open()){
        qDebug()<<"数据库正常打开";
    }
    else{
        qDebug()<<"打开错误";
    }
    if(!isDbFileExists)
    {
        //数据库文件不存在,表示该程序是第一次被启动,做数据库初始化以及建表的操作
        QSqlQuery sql_query(db_student);
        QString sql_str = "create table Student (id varchar(64) PRIMARY KEY , name varchar(64),gender varchar(64),age int)";


        if(!sql_query.exec(sql_str)){
            qDebug() << "Student table 创建失败 "<<sql_query.lastError().text();
            sql_query.lastError().text();
        }
        //插入方式1
        sql_str="insert into Student values('202310160001','张三','一个真正的Man',14 )";

        if(!sql_query.exec(sql_str))
               {
                   qDebug()<<"插入学生信息失败1";
                   qDebug()<<sql_query.lastError().text();
               }
         //插入方式2,像是使用占位符来插入
        sql_str="insert into Student values(?,?,?,? )";
        //准备sql语句
        sql_query.prepare(sql_str);
        sql_query.addBindValue("20201043032");
        sql_query.addBindValue("Tom");
        sql_query.addBindValue("武装直升机");
        sql_query.addBindValue(11);
        //判断是否插入成功:
        if(!sql_query.exec()){
            qDebug()<<"插入学生信息失败";
            qDebug()<<sql_query.lastError().text();
        }else{
            qDebug()<<"插入学生信息成功";

        }
        //插入方式3,取出具体绑定的对象,使用对应名称来插入
        sql_str = "insert into Student values(:id,:name,:gender,:age)";
        sql_query.prepare(sql_str);
        sql_query.bindValue(":id", "202310160003");
        sql_query.bindValue(":name", "GUANXI");
        sql_query.bindValue(":gender", "一个真正的Man");
        sql_query.bindValue(":age", "18");
        if(!sql_query.exec()){
            QMessageBox::information(this,"insert","插入失败");
               qDebug()<<sql_query.lastError().text();
        }else{
            QMessageBox::information(this,"slect","插入成功!");
        }
    }
    show_db();


}

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


void Widget::on_pb_new_clicked()
{
    QSqlQuery sql_query(db_student);
    //插入方式3,取出具体绑定的对象,使用对应名称来插入
    QString sql_str = "insert into Student values(:id,:name,:gender,:age)";
    sql_query.prepare(sql_str);
    sql_query.bindValue(":id", ui->le_xh->text());
    sql_query.bindValue(":name", ui->le_name->text());
    sql_query.bindValue(":gender", ui->le_sex->currentText());
    sql_query.bindValue(":age", ui->le_year->text());
    if(!sql_query.exec()){
        qDebug()<<"插入学生信息失败";
        qDebug()<<sql_query.lastError().text();
    }else{
        qDebug()<<"插入学生信息成功";

    }
    show_db();
}


void Widget::on_pb_delete_clicked()
{
    QSqlQuery sql_query(db_student);
    //插入方式3,取出具体绑定的对象,使用对应名称来插入
    //?使用addBindValue   id = :id
    QString sql_str = "DELETE FROM Student WHERE id = ?";
    sql_query.prepare(sql_str);
    sql_query.addBindValue( ui->le_xh->text());
    if(!sql_query.exec()){
        qDebug()<<"删除执行失败";
        qDebug()<<sql_query.lastError().text();
    }else{
        qDebug()<<"删除执行成功";

    }
    show_db();
}


void Widget::on_pb_select_clicked()
{

   show_slect(ui->le_xh->text());
}


void Widget::on_pb_modify_clicked()
{

}

void Widget::show_db()
{
    //将数据库和sql_query和student关联
    QSqlQuery sql_query(db_student);
    QString sql_str = "select *from Student";
    if(!sql_query.exec(sql_str))
     {
         qDebug()<<sql_str<<"failed";
         qDebug()<<sql_query.lastError().text();
         return;
     }
    ui->te->clear();
    while(sql_query.next()){
        QString buffer;
        buffer += (sql_query.value(0).toString()+" ");

        buffer += (sql_query.value(1).toString()+" ");

        buffer += (sql_query.value(2).toString()+" ");

        buffer += (sql_query.value(3).toString()+" ");
        ui->te->append(buffer);
    }



}

void Widget::show_slect(QString id)
{
    QSqlQuery sql_query(db_student);
    sql_query.prepare("SELECT * FROM Student WHERE id = ?");
    sql_query.addBindValue(id);
    if(!sql_query.exec())
     {
         qDebug()<<"failed";
         qDebug()<<sql_query.lastError().text();
         return;
     }
    ui->te->clear();
    if(sql_query.next()){
        QString buffer;
        buffer += (sql_query.value(0).toString()+" ");

        buffer += (sql_query.value(1).toString()+" ");

        buffer += (sql_query.value(2).toString()+" ");

        buffer += (sql_query.value(3).toString()+" ");
        ui->te->append(buffer);
    }else{
        // 没有查询到数据
        QMessageBox::information(this,"slect","查询失败,无该数据");
    }
}

注意:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值