QT应用SQL数据库,简单全面的应用,增删改查。

对于从来没接触过数据库的人来说,网上很多教程都太学术了。很多基本概念不了解的萌新,理解起来比较困难。这里一步一步操作,让小白也能掌握QT环境下SQL数据库的基本操作。

先看界面

基本功能就是 “增删改查 ” 四个按钮。
在这里插入图片描述

1.头文件和 .pro 文件

.pro 文件中

QT       += sql

.h文件中,添加头文件

#include <QSqlQuery>
#include <QtSql>
#include <qsqldatabase.h>

2.打开数据库

	QSqlDatabase db;//建立套接字,建议设置从全局变量。
    db = QSqlDatabase::addDatabase("QSQLITE","QtSql");//数据库名称 QtSql是数据库的名称
    db.setDatabaseName("QtSql.db");//数据库文件
    if(db.open())
    {
        qDebug()<<"打开数据库成功";
    }

3.查

    if(db.open())//打开数据库
    {
        QSqlQuery qry(db);//获取数据库套接字
        if(qry.exec("select * from Table1"))//Table1是数据库表格的名称
        {
            Sql_Size = 0;//全局变量 记录数据库有多少条数据
            while(qry.next())
            {
                Sql_TablePart[Sql_Size].Sql_Index = qry.value(0).toUInt();
                Sql_TablePart[Sql_Size].Sql_Name = qry.value(1).toString();
                Sql_TablePart[Sql_Size].Sql_Values = qry.value(2).toDouble();
                Sql_TablePart[Sql_Size].Sql_Select = qry.value(3).toBool();
                Sql_Size++;//全局变量
            }
        }
    }

查询数据库的内容,这里利用了一个结构体,储存并显示。
这里我提前建立好啦一个数据库,名称是QtSql,表格名称是Table1。
在这里插入图片描述

4个数据的Fields:

  • int 类型的 索引 AA
  • text 类型的 名称 BB
  • double 类型的 CC
  • bool 类型的 DD

在这里插入图片描述

4.增

    QSqlQuery qry(db);//获取套接字
    qry.prepare("insert into Table1(AA,BB,CC,DD)" "values(:AA,:BB,:CC,:DD)");//4个类型
    qry.bindValue(":AA",Sql_Size);
    qry.bindValue(":BB","烟雾报警器");
    qry.bindValue(":CC",3.14);
    qry.bindValue(":DD",0);
    qry.exec();//写入数据库

5.删

    QSqlQuery qry(db);//获取套接字    
    qry.prepare("delete from Table1 where AA=?");//要删除AA行数据为Sql_Size-1的那一行
    qry.addBindValue(Sql_Size-1);
    qry.exec();//写入数据库

6.改

    QSqlQuery qry(db);
    qry.prepare("update Table1 set BB=?,CC=? where AA=?");//改变AA行为Sql_Size-1的那一行
    qry.addBindValue(3.14);                          //BB那一个元素 改成 3.14
    qry.addBindValue(5.72);                          //CC那一个元素 改成 5.72
    qry.addBindValue(Sql_Size-1);
    qry.exec();

7.补充数据库软件

我用的数据软件是SQLiteExpertSetup
在这里插入图片描述
网上都可以下到。版本比较低,可能有BUG,基本功能都能用。
具体操作如下:

  1. 创建数据库 File > New DataBase 然后选中路径,文件名称。
  2. 创建表格 邮件创建好的数据库 > New Table > 起名
  3. 创建Fields 点击Add添加表头,名称尽量用英文。完成后点击Apply保存。
  4. 最后就可以自定义数据了,用程序添加也可以。

总结

  • 数据库简单的可以理解成一个结构体数组
  • 用QT使用数据库,其实用的还是SQL的命令语句。基本功能都可以这样实现:
qry.exec("insert into Table1 values(2,'烟雾传感器',2.56,0)");//增
qry.exec("delete from Table1 where AA=1");//删
qry.exec("update Table1 set BB=3.14,CC=5.17 where AA=3");//改

qry.next();
Sql_Index = qry.value(0).toUInt();//查询
  • 对于没有SQL的基础的我来说,记住几个操作的方法,简单的功能都可以实现。
  • 数据库的数据,关闭软件,关闭电脑数据也能保留。简单的记录一下软件的登陆账号密码,非常有用。

8.“增”的进阶写法

数据库有好多元素,需要

	if(db.open())//打开数据库
    {
        QSqlQuery qry(db);//获取数据库
        if(qry.exec("select * from LSSJ"))//获取数据表
        {
            //************整理字符串成 qry.prepare("insert into LSSJ(SJ,SJ1,SJ2,SJ3)" "VALUES(:SJ,:SJ1,:SJ2,:SJ3)");
            QString Qry_Str = "insert into LSSJ(SJ";
            QString Qry_Str1 = "VALUES(:SJ";
            for(int i=1;i<45;i++)
            {
                Qry_Str += ",SJ";
                Qry_Str += QString::number(i);

                Qry_Str1 += ",:SJ";
                Qry_Str1 += QString::number(i);
            }
            Qry_Str += ")";
            Qry_Str1 += ")";

            Qry_Str += ' ';
            Qry_Str += Qry_Str1;

            qDebug()<<Qry_Str;//************整理字符串成

            qry.prepare(Qry_Str);//写入字符串
            qry.bindValue(":SJ",Qt_Time_String);//写入第一个数据
            for(int i=0;i<44;i++)//写入44个数据
            {
                Qry_Str1 = ":SJ";
                Qry_Str1 += QString::number(i+1);
                qry.bindValue(Qry_Str1,PKX_Value[i]);
            }
            if(qry.exec())//看看写入是否成功
            {
                qDebug()<<"写入并判断是否成功OK";
            }
            else
            {
                qDebug()<<"写入并判断是否成功err";
            }

            //            qry.prepare("insert into LSSJ(SJ,SJ1,SJ2,SJ3,SJ4,SJ5,SJ6,SJ7,SJ8)" "VALUES(:SJ,:SJ1,:SJ2,:SJ3,:SJ4,:SJ5,:SJ6,:SJ7,:SJ8)");
            //            qry.bindValue(":SJ",Qt_Time_String);
            //            qry.bindValue(":SJ1",PKX_Value[0]);
            //            qry.bindValue(":SJ2",PKX_Value[1]);
            //            qry.bindValue(":SJ3",PKX_Value[2]);
            //            qry.bindValue(":SJ4",PKX_Value[3]);
            //            qry.bindValue(":SJ5",PKX_Value[4]);
            //            qry.bindValue(":SJ6",PKX_Value[5]);
            //            qry.bindValue(":SJ7",PKX_Value[6]);
            //            qry.bindValue(":SJ8",PKX_Value[7]);
        }
    }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐