QT数据库,实现数据库增删改查

QT关于数据库的相关概念

QT将数据库分为三个层次:

数据库驱动层:QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin

sql接口层:QSqlDatabase、QSqlQuery、QSqlRecord、QSqlError

用户接口层:提供一些模型QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel

实现数据库操作的相关方法

添加数据库:

[static] QSqlDatabase QSqlDatabase::addDatabase(
    QSqlDriver *driver, 
    const QString &connectionName = QLatin1String(defaultConnection)) 
QSQLITE SQLite version 3 or above 

设置数据库名称:

​​​​​​​void QSqlDatabase::setDatabaseName(const QString &name)

包含数据库:

bool QSqlDatabase::contains(const QString &connectionName = QLatin1String(defaultConnection)) 

打开数据库:

​​​​​​​bool QSqlDriver::open(const QString &db)

关闭数据库:

void QSqlDatabase::close() 

错误信息:

QSqlError QSqlDatabase::lastError()

sql语句执行:构造一个QSqlQuery类对象,调用其成员函数exec,执行sql语句

bool QSqlQuery::exec(const QString &query)

遍历查询结果的函数:

bool QSqlQuery::next()

通过数据库实现学生管理系统

功能界面:

主要功能代码

#include "widget.h"
#include "ui_widget.h"

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

    //判断数据库对象是否包含了自己使用的数据库,例如Student.db
    if(!db.contains("Student,db"))
    {
        //添加一个数据库
        //函数原型:static QSqlDatabase addDatabase(const QString& type);
        //参数:数据库版本
        //返回值:添加的数据库
        db = QSqlDatabase::addDatabase("QSQLITE");      //表示使用的是sqlite3版本的数据库


        //给数据库命名
        db.setDatabaseName("Student.db");
    }

    //打开数据库
    if(!db.open())
    {
        QMessageBox::information(this, "提示", "数据库打开失败");
        return;
    }

    //代码执行到这说明数据库创建并打开完毕,就可以创建数据表了
    //创建数据表需要使用sql语句,需要使用QsqlQuery类对象来完成
    //准备sql语句
    QString sql = "create table if not exists myTable("           //创建表的sql语句
                  "id integer primary key autoincrement,"       //id主键,允许自增
                  "numb integer,"                               //学号
                  "name varchar(10),"                           //姓名
                  "score integer,"                              //分数
                  "sex varchar(4))";                            //性别
    //定义语句执行者
    QSqlQuery query;
    //使用query执行sql语句
    if(!query.exec(sql))
    {
        QMessageBox::information(this, "失败", "创建表失败");
    }else{
        QMessageBox::information(this, "成功", "创建表成功");
    }
}

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

//录入按钮对应的槽函数
void Widget::on_pushButton_clicked()
{
    //获取ui界面中要存入数据库中的数据
    int numb_ui = ui->lineEdit->text().toInt();      //获取UI界面的学号
    QString name_ui = ui->lineEdit_2->text();        //获取UI界面的姓名
    int score_ui = ui->lineEdit_3->text().toInt();   //获取UI界面的成绩
    QString sex_ui = ui->lineEdit_4->text();         //获取UI界面的性别

    if(numb_ui == 0 || name_ui.isEmpty() || score_ui == 0 || sex_ui.isEmpty())
    {
        QMessageBox::information(this, "提示", "请将信息填写完整");
        return;
    }

    //准备sql语句
    QString sql =QString("insert into myTable(numb, name, score, sex) values (%1, '%2', %3, '%4')").arg(numb_ui).arg(name_ui).arg(score_ui).arg(sex_ui);

    //定义语句执行者
    QSqlQuery query;

    if(!query.exec(sql))
    {
        QMessageBox::information(this, "失败", "录入数据失败");
    }else{
        QMessageBox::information(this, "成功", "录入数据成功");
    }

    //清除
    ui->lineEdit->clear();
    ui->lineEdit_2->clear();
    ui->lineEdit_3->clear();
    ui->lineEdit_4->clear();

}

//展示按钮对应的槽函数
void Widget::on_pushButton_2_clicked()
{
    //准备sql语句
    QString sql = "select * from myTable";

    //定义语句执行者
    QSqlQuery query;

    if(!query.exec(sql))
    {
        QMessageBox::information(this, "失败", "没有找到数据");
        return;
    }

    //将查找到的所有结果都放到query对象中
    //可以通过next函数不断遍历查询结果
    int i = 0;          //记录行号
    while(query.next())
    {
        //遍历的是任意一组记录,query.record
        //要找到每条记录中的每个数据,使用value(i)
        //将数据库中的表格战术到UI界面
        //ui->tableWidget->setItem()
        //query.record().value()

        for(int j=0; j<query.record().count()-1; j++)
        {
            ui->tableWidget->setItem(i, j, new QTableWidgetItem(query.record().value(j+1).toString()));
        }
        i++;
    }
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值