软件设计开发笔记4:QT操作SQLite数据库

这篇具有很好参考价值的文章主要介绍了软件设计开发笔记4:QT操作SQLite数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  有时候我们需要在软件中记录一些历史数据以便于对数据的查询。而我们希望软件不能太复杂,体量也不要太大,这个时候就需要如SQLite这样轻量级的数据库。这篇中我们就来讨论如何在使用QT开发应用是操作SQLite数据库。

0、概述

  SQLite是一款开源、轻量级、跨平台的数据库,无需Server,无需安装和管理配置。它的设计目标是嵌入式的,所以很适合小型应用,也是Qt应用开发种常用的一种数据库。
  我们先设计一个简单的操作界面,最上面一行是六个操作按钮,分别实现数据库的连接、表格创建、数据查询,插入数据、修改数据以及删除数据。中间文纸是两个输入框,分别是输入姓名和年龄。最下面是一个图标显示。具体形式如下:
软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

  在开发之前,如果我们使用QtCreator则需要在*.pro中引入sql模块(QT+=sql),如果是VS中在Qt VS Tool里勾选上sql模块,就可以使用该模块的接口了。

1、连接数据库

  QSqlDatabase类提供了一个接口,用于通过连接访问数据。SQLite在单个文件上运行,在打开连接时必须将其设置为数据库名称。如果该文件不存在,SQLite将尝试创建它。
  我们实现一个连接数据库的函数,并在“连接数据库”按钮的槽函数中调用它来实现数据库的连接。具体的代码如下:

void MainWindow::ConnectDatabase()
{
    if(QSqlDatabase::contains("qt_sql_default_connection"))
    {
        db = QSqlDatabase::database("qt_sql_default_connection");\
    }
    else
    {
        db = QSqlDatabase::addDatabase("QSQLITE");
    }

    db.setDatabaseName("DBTest.db");
}

  在上述代码中,我们连接一个名称为“DBTest.db”的数据库,但这个数据库一开始是没有的,所以运行这段代码后会创建一个名为“DBTest.db”的数据库。运行完成后我们使用SQLiteStudio查看,发现已经创建了一个名为“DBTest.db”的数据库,并可一连接上。如下图:
软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

2、创建数据表

  接下来,我们创建一个数据表。其中QSqlQuery类可以使用SQL语句来实现与数据库交互。所以在这里我们使用该类操作SQL语句穿件一个数据表。在这里我们创建一个名为staff的表格,该表中包括3个字段:id字段作为主键并自动增长;name字段和age字段用于存储信息。具体代码如下:

void MainWindow::CreateTable()
{
    const QString sql="CREATE TABLE IF NOT EXISTS staff (id   INTEGER   PRIMARY KEY AUTOINCREMENT NOT NULL,name CHAR (50) UNIQUE NOT NULL,age  INTEGER)";

    //QSqlQuery构造前,需要db已打开并连接
    //未指定db或者db无效时使用默认连接进行操作
    QSqlQuery query;

    if(query.exec(sql))
    {
        qDebug()<<"init table success";
    }
    else
    {
        //打印sql语句错误信息
        qDebug()<<"init table error";
    }
}

  运行完成创建表格命令后,我们使用SQLiteStudio查看数据的内容。连接数据库可以看到staff表格以及包含的3个字段,说明创建成功,具体如下图:
软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

  关于QSqlQuery类,他是封装在QSqlDatabase上,用以执行SQL查询中创建,导航和检索数据所涉及的功能。它可以被用来执行DML(数据操纵语言)语句,例如select、insert、update、delete,以及DDL(数据定义语言)语句,如create table。在后续的增、删、改、查等操作中也是使用该类。

3、添加数据

  我们已经创建了表格,接下来我们尝试向表格中添加数据。在这里我们使用QSqlQuery类中的prepare()方法来预设SQL语句,然后再通过bindValue()方法加入数据。具体实现代码如下:

void MainWindow::InsertData()
{
    QSqlQuery query;
    query.prepare("INSERT INTO staff (name,age) VALUES (:name,:age)");
    query.bindValue(":name", ui->lineEditName->text());
    query.bindValue(":age", ui->lineEditAge->text());
    query.exec();
}

  我们在操作界面中添加3条记录,分别在姓名框和年龄框中输入名字和年龄点击“插入数据”按钮实现对数据的插入。完成后显示如下:

软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

4、修改数据

  接下来我们尝试对表中的数据进行修改。我们依然使用QSqlQuery类中的prepare()方法来预设SQL语句,然后再通过bindValue()方法加入数据。具体实现代码如下:

void MainWindow::UpdateData()
{
    QSqlQuery query;

    query.prepare("UPDATE staff SET age=:age WHERE name=:name");
    query.bindValue(":name",ui->lineEditName->text());//通过自定义的别名来替代
    query.bindValue(":age",ui->lineEditAge->text());
    query.exec();
}

  在这里我们尝试将第条记录修改一下,我们在姓名框中输入“Rose”,在年龄框中输入“31”,将Rose的年龄有28修改为31。输入完成点击“修改数据”按钮,结果如下:
软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

5、删除数据

  接下来我们尝试删除数据。我们依然使用QSqlQuery类中的prepare()方法来预设SQL语句,然后再通过bindValue()方法加入数据。我们实现根据姓名来删除数据,具体实现代码如下:

void MainWindow::DeleteData()
{
    QSqlQuery query;
    query.prepare("DELETE FROM staff WHERE name=?");
    query.addBindValue(ui->lineEditName->text());
    query.exec();
}

  我们删除第3条数据,我们在姓名框中输入“Rose”,然后点击“删除数据”按钮,得到结果如下:
软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

6、查询数据

  最后我们来实现数据的查询问题。依然是使用QSqlQuery类,我们在这里使用查询表格全部内容的方式。具体的实现代码如下:

void MainWindow::QueryData()
{
    ui->tableWidget->clear();
    QStringList header;
    header<<"id"<<"name"<<"age";
    ui->tableWidget->setHorizontalHeaderLabels(header);

    int i=0;

    QSqlQuery query("SELECT * FROM staff");
    while (query.next())
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(query.value(0).toString()));
        ui->tableWidget->setItem(i,1,new QTableWidgetItem(query.value(1).toString()));
        ui->tableWidget->setItem(i,2,new QTableWidgetItem(query.value(2).toString()));
        i++;
    }
}

  我们现在删除后的表格中添加2条数据。分别是姓名“Rose”年龄“33”和姓名“Jake”年龄“45”两条数据。然后重新连接数据库并点击“查询数据”按钮,得到如下结果:
软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

  同时我们也可以使用SQLiteStudio直接产看数据库的内容,具体如下:
软件设计开发笔记4:QT操作SQLite数据库,应用软件,数据库,笔记,qt

  两种方式查询到的结果是一样的,说明我们的操作是正确的。

7、小结

  在这一篇中我们尝试了使用QT操作SQLite数据库,增、删、改、查以及创建等都可很好的实现。文章来源地址https://www.toymoban.com/news/detail-705351.html

欢迎关注:

到了这里,关于软件设计开发笔记4:QT操作SQLite数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT-sql操作(sqlite数据库文件)

        #include SqlDriver 如名称,数据库驱动。 hasFeature : 检查驱动是否支持特定功能,如事务、批处理等。 isQuerySize : 驱动是否支持  QSqlQuery::size  函数。 open 、 close : 打开和关闭数据库连接。 isOpen : 判断数据库连接是否处于打开状态。 commitTransaction 、 rollbackTransaction :

    2024年02月04日
    浏览(53)
  • 【Qt设计开发】GUI界面设计开发

      本文是我在学习QT的GUI界面设计过程当中的心得和学习笔记,在学习时已经有C, C++,Python的基础。文章附上了学习的代码,仅供大家参考。如果有问题,有错误欢迎大家留言。此外,博主还有另外几篇文章,分别关于 Python基础知识 、 Python的具体应用 、 C语言指针结构体

    2024年02月02日
    浏览(50)
  • 设计模式: 软件设计的分层与软件开发注意事项

    软件设计的分层 系统级设计架构 应用级架构 模块级架构 代码级架构 1) 系统级设计架构 应用在整个系统内,如与后台服务如何通信,与第三方系统如何集成 包括业务的关系和协作的机制 设计后端:与后台数据传递的机制 包括:api设计规则,访问授权的一个开放标准(OAuth

    2024年02月07日
    浏览(45)
  • 数据库字段变更监控平台设计开发

      在开发过程中,在值班解决客服问题时,在分析定位别人写的业务代码问题时, 重点是不是自己写的代码 ,只看到了数据库中落库最终数据,并不知道业务逻辑问题发生时数据库表中当时数据情况?如果能知道当时数据情况,就能更准,更快的定位到问题,可能大家对

    2024年02月15日
    浏览(64)
  • 数据库系统 - 家庭教育平台设计开发

    目录 1.绪论 1.1项目背景 1.2家庭教育平台的发展现状与优势 1.2.1国内外发展现状 1.2.2家庭教育平台的优势 2.需求分析 2.1可行性分析 2.1.1经济可行性 2.1.2 技术可行性 2.1.3操作可行性 2.2系统功能 2.2.1 家庭教育资源 2.2.2 家庭教育指导师 2.2.3家庭教育咨询 2.2.4 家长论坛 2.3项目所涉

    2024年02月16日
    浏览(58)
  • 软件架构设计(八) 基于架构的软件开发方法

    ABSD虽然在日常生活中并不常见,但是在考试中却是极为常见的,因此仍然是我们的重点学习知识点。 特点 基于架构的软件设计(Architecture-Based Software Design,ABSD),这个开发方法是 架构驱动 。 即 强调由业务、质量和功能需求的组合驱动架构设计 。就是会考虑到业务的情况

    2024年02月09日
    浏览(51)
  • 软件开发、设计、架构的其他原则

    LOD:迪米特法则(Law of Demeter) CRP:合成复用原则(Composite Reuse Principle) DRY:不要重复你自己原则 (Don’t Repeat Yourself Principle) KISS:KISS原则 (Keep It Simple and Stupid Principle) YAGNI:你不需要它原则 (You aren\\\'t gonna need it Principle) 又叫最少知识原则(Least Knowledge Principle)。只和你的直接朋友交

    2024年02月02日
    浏览(79)
  • 服务器管理平台开发(2)- 设计数据库表

    本篇文章主要对数据管理平台数据库表设计进行介绍,包括单库多表设计、SQL语句、视图构造等 设备品牌、序列号、型号等使用业务主表进行记录,逻辑磁盘、PCI设备可能出现1对N的情况,分别使用PCI设备表、Mac地址表、逻辑磁盘表、应用程序表、登录日志表进行记录 构建虚

    2024年01月22日
    浏览(63)
  • 微信小程序开发14 复杂数据库设计:如何用好云开发提供的文档型数据库?

    我们知道,大多数互联网应用产品都会不断产生各种数据(可能是用户产生的,也可能是系统自动生成的)。要想高效保存这些数据,并维持应用产品的有效运转,就要用到数据库。 数据库是高效存储数据、读取数据的存储器。我们日常用到的绝大部分应用,都是把数据库放

    2024年02月09日
    浏览(62)
  • 软件开发:面向对象设计的七大原则!

    开闭原则、里氏代换原则、迪米特原则(最少知道原则)、单一职责原则、接口分隔原则、依赖倒置原则、组合/聚合复用原则。 开闭原则(The Open-Closed Principle ,OCP) 开闭原则:软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。 概念理解 开闭原则是指在进行面

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包