Qt实战案例(25)——利用QSQL相关类实现对SQLite数据库的增删改查操作

Qt提供了一种进程内数据库SQLite。它小巧灵活,无须额外安装配置且支持大部分ANSI SQL92标准,是一个轻量级的数据库,概括起来具有以下优点。

  1. SQLite的设计目的是实现 嵌入式SQL数据库引擎,它基于纯C语言代码,已经应用在非常广泛的领域内。
  2. SQLite在需要持久存储时可以直接读写硬盘上的数据文件,在无须持久存储时也可以将整个数据库置于内存中,两者均不需要额外的服务器端进程,即SQLite是无须独立运行的数据库引擎。
  3. 开放源代码,整套代码少于3万行,有良好的注释和90%以上的测试覆盖率。
  4. 少于250KB的内存占用容量(gcc编译情况下)。
  5. 支持视图、触发器和事务,支持嵌套SQL功能。
  6. 提供虚拟机用于处理SQL语句。
  7. 不需要配置,不需要安装,也不需要管理员。
  8. 支持大部分ANSI SQL92标准。
  9. 大部分应用的速度比目前常见的客户端/服务器结构的数据库快。就3
  10. 编程接口简单易用。

目录

*
一、项目介绍
二、项目基本配置
三、UI界面设计
四、主程序实现

+ 4.1 pro文件
+ 4.2 main.cpp文件
五、效果演示

一、项目介绍

利用Qt对SQLite数据库完成数据的增、删、改、查等操作。

二、项目基本配置

新建一个Qt案例,项目名称为”SQLTest”,基类选择”QWidget”,取消创建UI界面复选框的选中状态,完成项目创建。

三、UI界面设计

无UI界面

四、主程序实现

4.1 pro文件

在SQLTest.pro文件中添加如下代码:

QT+=sql

4.2 main.cpp文件

源文件main.cpp中代码如下:
首先需要创建SQLite数据库,然后激活与数据库的物理连接:

    QSqlDatabase db =QSqlDatabase::addDatabase ("QSQLITE");
    db.setHostName ("SQLite-001") ;
    db.setDatabaseName ("qtDB.db");
    db.setUserName ("Wendy") ;
    db.setPassword("123456") ;
    db.open();

创建数据库表:


    QSqlQuery query;
    bool success=query.exec("create table automobil"
        "(id int primary key,attribute varchar,"
        "type varchar,kind varchar,nation int,"
        "carnumber int,elevaltor int,"
        "distance int,oil int,"
        "temperature int)");
    if (success)
        qDebug()<<QObject::tr("数据库表创建成功!\n");
    else
        qDebug()<<QObject::tr("数据库表创建失败!\n");

I.数据查询:


    query.exec("select * from automobil");
    QSqlRecord rec=query.record();
    qDebug()<<QObject::tr("automobile表的字段数:")<< rec.count();

II.数据插入:


    QTime t;
    t.start();
    query.prepare("insert into automobil values(?,?,?,?,?,?,?,?,?,?)");
    long records=100;
    for (int i=0; i<records; i++){

        query.bindValue(0,i) ;
        query.bindValue(1, "四轮");
        query.bindValue(2, "轿车");
        query.bindValue(3,"富康") ;
        query.bindValue(4,rand()%100);
        query.bindValue(5,rand()%10000);
        query.bindValue(6,rand()%300);
        query.bindValue(7, rand()%200000);
        query.bindValue(8,rand()%52);
        query.bindValue(9,rand()%100);

        success=query.exec();
        if(!success){
            QSqlError lastError=query.lastError();
            qDebug ()<<lastError.driverText()<<QString(QObject::tr("插入失败"));
        }
    }
    qDebug()<<QObject::tr("插入%1条记录,耗时:%2ms").arg (records).arg(t.elapsed());

    t.restart() ;
    success=query.exec("select * from automobil order by id desc") ;
    if (success)
        qDebug() <<QObject::tr("排序%1条记录,耗时:%2 ms").arg (records).arg(t.elapsed());
    else
        qDebug()<<QObject::tr("排序失败!");

III.数据修改:


    t.restart();
    for (int i=0;i<records;i++)
    {
        query.clear() ;
        query.prepare(QString ("update automobil set attribute=?, type=?,"
                        "kind=?, nation=?,"
                        "carnumber=? ,elevaltor=?,"
                        "distance=?,oil=?, "
                        "temperature=? where id=%1").arg(i));
        query.bindValue(0, "四轮") ;
        query.bindValue(1, "轿车") ;
        query.bindValue(2, "富康") ;
        query.bindValue(3, rand()%100) ;
        query.bindValue(4, rand()%10000);
        query.bindValue(5, rand()%300);
        query.bindValue(6, rand()%200000) ;
        query.bindValue(7, rand()%52) ;
        query.bindValue(8, rand()%100) ;

        success=query.exec();
        if (!success)
        {
            QSqlError lastError=query.lastError();
            qDebug ()<<lastError.driverText()<<QString (QObject::tr ("更新失败"));
        }
    }
    qDebug()<<QObject::tr("更新%1条记录,耗时:%2ms").arg (records).arg(t.elapsed());

IV.数据删除:


t.restart();
query.exec("delete from automobil where id=15") ;
qDebug()<<QObject::tr("删除一条记录,耗时:%1 ms") .arg(t.elapsed()) ;
return 0;

【注意】:以上代码均为Qt5相关代码,Qt6及以上版本取消了QTime类下的t.restart()函数和t.elapsed()函数,将其封装到了QElapsedTimer类中,请使用相应代码代替,完整代码参考:资源

五、效果演示

完整效果如下:

Qt实战案例(25)——利用QSQL相关类实现对SQLite数据库的增删改查操作
生成的qtDB.db文件如下:
Qt实战案例(25)——利用QSQL相关类实现对SQLite数据库的增删改查操作

如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/76627517
当然,这里也提供了Qt6实现的相关代码,可以参考:https://download.csdn.net/download/didi_ya/76630272

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

Original: https://blog.csdn.net/didi_ya/article/details/122561177
Author: wendy_ya
Title: Qt实战案例(25)——利用QSQL相关类实现对SQLite数据库的增删改查操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815776/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球