文章目录

  • Qt中使用SQLite
  • 1. 概述
  • 2. 数据库基本操作
    • 2.1 建立数据库
    • 2.2 打开数据库
    • 2.3 关闭数据库
    • 2.4 创建数据表
    • 2.5 插入数据
    • 2.6 更新/修改数据
    • 2.7 查询数据——遍历查询、条件查询
      • 2.7.1 遍历查询
      • 2.7.2 条件查询
  • 3. 条件查询与遍历查询的对比

Qt中使用SQLite

​SQLite 是一款开源轻量级的数据库软件,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎,是在世界上最广泛部署的 SQL 数据库引擎,源代码不受版权限制。可以集成在其他软件中,应用十分方便。虽然是一款轻量级的数据库,但也可以满足很多应用场景。

​Qt中对应数据库的模块为Qt SQL,Qt SQL模块使用数据库驱动插件来和不同的数据库接口进行通信,由于Qt SQL模块的接口是独立于数据库的,所以所有数据库特定的代码都包含在这些驱动中。

1. 概述

数据库的基本操作可以用常说的的 CRUD 来概括,即:

  • C:Create增加对应CREATE TBL ...;
  • R:Retrieve查询SELECT * from TBL;
  • U:Update修改UPDATE TBL ..SET ...;
  • D:Delete删除DELETE FROM TBL WHERE ....;

在本文中除了介绍在Qt中使用SQLite数据库的基本操作外,还会展示使用数据库储存数据后,快速查询与修改目标信息的优势

在文章示例中,关于数据库操作的类为SqliteOperator,数据库对象为全局变量:

QSqlDatabase db;

2. 数据库基本操作

2.1 建立数据库

void SqliteOperator::CreatDb()
{if(QSqlDatabase::contains("qt_sql_default_connection")){db = QSqlDatabase::database("qt_sql_default_connection");}else{db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("test.db");db.setUserName("test");db.setPassword("test");}
}
  1. 建立数据库的第一步是要判断该数据库对象的连接是否已经存在,若已经存在则直接获取该对象即可。
  2. 每个数据库连接都存在一个连接名称,qt_sql_default_connection为默认连接名称,实际使用中,这个连接名称可以自己指定,指定方法为通过QSqlDatabase::addDatabase的第二个参数指定。第一个参数中的QSQLITE表示使用SQLite数据库。
  3. setDatabaseName用于指定数据库文件名
  4. setUserName setPassword设置用户名和密码可自定义,也可忽略

2.2 打开数据库

bool SqliteOperator::OpenDb()
{if(!db.open()){qDebug() << "Error: Failed to connect database." << db.lastError();return false;}return true;
}

2.3 关闭数据库

void SqliteOperator::CloseDb()
{db.close();
}

2.4 创建数据表

void SqliteOperator::CreateTable()
{QSqlQuery sql_query;QString creat_sql = "create table student (id int primary key, name varchar(30), age int)";sql_query.prepare(creat_sql);if(!sql_query.exec()){qDebug() << "Error: Fail to create table." << sql_query.lastError();}else{qDebug() << "Table created!";}
}
  • 对数据库进行操作需要用到QSqlQuery类,操作前必须定义一个对象。

  • 创建表格语句:create table (f1 type1, f2 type2,…);

  • QSqlQuery类在使用过程中有两种方式:(后边使用QSqlQuery类时等同)

    1. 直接把语句写在exec()

      sql_query.exec("create table student (id int primary key, name varchar(30), age int)");
      
    2. 分步写,利用prepare()函数,再使用exec()

2.5 插入数据

void SqliteOperator::InsertData()
{QString insert_sql = "insert into student values (?, ?, ?)";QSqlQuery sql_query;sql_query.prepare(insert_sql);sql_query.addBindValue(GetMaxId() +1);sql_query.addBindValue("Wang");sql_query.addBindValue(25);if(!sql_query.exec()){qDebug() << sql_query.lastError();}else{qDebug() << "inserted Wang!";}}
  • 插入语句:insert into values (value1, value2,…);

2.6 更新/修改数据

void SqliteOperator::UpdateData()
{QString update_sql = "update student set name = :name where id = :id";QSqlQuery sql_query;sql_query.prepare(update_sql);sql_query.bindValue(":name", "Qt");sql_query.bindValue(":id", 1);if(!sql_query.exec()){qDebug() << sql_query.lastError();}else{qDebug() << "updated!";}
}
  • 语句:update <table_name> set <f1=value1>, <f2=value2>… where <expression>;

2.7 查询数据——遍历查询、条件查询

2.7.1 遍历查询

void SqliteOperator::QueryAllData()
{QString select_all_sql = "select * from student";QSqlQuery sql_query;sql_query.prepare(select_all_sql);if(!sql_query.exec()){qDebug()<<sql_query.lastError();}else{while(sql_query.next()){int id = sql_query.value(0).toInt();QString name = sql_query.value(1).toString();int age = sql_query.value(2).toInt();qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);}}
}
  • 查询部分 select <f1>, <f2>, ... from <table_name>;
  • 查询所有 select * from <table_name>;

2.7.2 条件查询

void SqliteOperator::QueryData()
{QString select_sql = QString("select * from student where name = '%1' and (age = '%2' or age = '%3')").arg("Wang").arg(30).arg(25);QSqlQuery sql_query;if(!sql_query.exec(select_sql)){qDebug()<<sql_query.lastError();}else{while(sql_query.next()){int id = sql_query.value(0).toInt();QString name = sql_query.value(1).toString();qDebug()<<QString("id:%1    name:%2").arg(id).arg(name);}}
}
  • 语句中and or表示逻辑关系

3. 条件查询与遍历查询的对比

加循环建了一个包含229300条数据,7448kb的数据库。

条件查询耗时:30ms

遍历查询耗时:100ms

随着数据量的增加,差距应该会更明显。

Qt中使用SQLite相关推荐

  1. Qt中操作SQLite数据库

    0.前言 SQLite是一款开源.轻量级.跨平台的数据库,无需server,无需安装和管理配置.它的设计目标是嵌入式的,所以很适合小型应用,也是Qt应用开发种常用的一种数据库. 1.驱动 Qt SQL ...

  2. 在linux下Qt使用sqlite,QT中SQLite使用【实例】

    今天分享一个Qt下,使用SQLite的一个案例.QT中SQLite使用[实例] #include //#include #include #include #include #include #inc ...

  3. Qt使用CMake在Clion中运行显示出的UI界面看起来很老,很过时怎么办?CMake下的Qt怎么使用SQLite?

    一.问题概述 如果使用Clion默认配置编译出来的UI界面看起来很老套,就像是win2000的界面.但是如果使用Qt Creator运行就没有问题,是现代windows的界面 二.问题原因 最后经过一 ...

  4. QT中Sqlite的使用

    环境: 静态编译过sqlite 步骤: 1.C++链接器中加入Sqlite.lib,然后在测试一下是否能正常加载Sqlite驱动 #include<QtPlugin> Q_IMPORT_P ...

  5. 在QT中使用MySQL数据库

    前篇已经写了如何使用QT链接sqlite和SQLServer,见点击打开链接 本次主要说明如何通过QT链接MySQL数据库: 首先确保数据库中存在Mysql的驱动,详见QT安装目录中的plugins/ ...

  6. QT中Model-View-Delegate委托代理机制用法介绍

    文章目录 本地数据加载(Data) 添加数据模型(Model) 添加代理模型(Proxy) 添加元素的代理(Delegate) 添加视图层(View) 使用效果 之前的一篇文章中介绍过QT的委托代理机 ...

  7. qt中configure参数配置说明

    转载地址:http://blog.csdn.net/chenyong19870904/article/details/6712409 当进入解压好的源码包后,使用./configure –help命令 ...

  8. QT 中QTimer 和 startTimer()的区别

    最需要注意一点 请注意,QTimer的准确性取决于底层操作系统和硬件.timerType参数允许您自定义计时器的准确性.有关不同计时器类型的信息,请参见Qt::TimerType.大多数平台支持20毫 ...

  9. QT 中使用 OpenCv 的 CascadeClassifier 报错

    问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候,在构造函数中进行检测器的初始化,随后调用相机读取图片的时候就会报错,报的错误是 Segment Fa ...

  10. 【Qt】Qt中使用ssl时报错:qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method

    一.问题 在Qt中使用https,运行时报错: qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method 二.原因分析 SSLv2由 ...

最新文章

  1. 速看!高校开学返校的40个最新信息
  2. 这个冬天,将是共享单车最艰难的时刻
  3. linux 符号链接攻击防御简介
  4. eigen跟踪MILTracker
  5. 仓库处理中 无法修改_阿里云自研数据仓库 AnalyticDB 再捧 TPC 全球冠军
  6. linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)
  7. 读C#开发实战1200例子记录-2017年8月14日10:03:55
  8. TortoiseGit 自动登录
  9. 硬币兑换python 每个面值有多个_【算法27】硬币面值组合问题
  10. netcore之hello
  11. webform如何接收前端的ajax数据,HttpWebResponse Post 前端控件数据,后台如何接收?...
  12. MYSQL安装遇到MySQL-server conflicts with错误(mysql5.6.17)
  13. CAD注册机注册码不能正常使用,解决方案
  14. 交易系统架构演进之路(二):2.0版
  15. python 计算月还款额度
  16. matlab cui,阻力汽车论文,关于基于Matlab-CUI的汽车动力性相关参考文献资料-免费论文范文...
  17. 使程序在Linux下后台运行
  18. Intouch学习笔记—新建工程
  19. Java无参构造方法的作用
  20. flv格式视频怎么转换成mp4

热门文章

  1. xshell 配置公钥 免密码登陆
  2. Matlab绘制隐式函数形成曲面的方法总结(转载)
  3. 服务器上系统怎么启动iis,IIS服务器如何重新启动
  4. Unity 计算包围盒
  5. 钢琴自学app开发(原生代码)
  6. Radius认证协议(一)
  7. 高中计算机教师学期论文,高中信息技术论文范文
  8. 基于matlab的神经网络设计,matlab神经网络应用设计
  9. 商品进销差价_新准则下商品进销差价实务处理
  10. AutoCAD2000 DWG 格式 section location部分(简述)