Qt SQLite简单用法

这篇具有很好参考价值的文章主要介绍了Qt SQLite简单用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

序言

感觉自己老是会忘记需要百度,干脆直接记下来

环境

Qt5.14.2 + MSVC2017(VS2019)

使用前准备

Qt Creator:

QT	+= sql

VS:

属性页-》Qt Project Settings-》Qt Modules-》Sql

.

SQLite数据类型

SQLite与其他数据库不同,其他数据库是静态数据类型,即创建时便确定以后插入的数据类型;

而SQLite是动态数据类型,即即使表格声明了类型,其插入不同的数据类型依然不受影响,只是会优先参考建表时的类型。

因此尽量插入按表格创建类型来插入,可以减少对转换时的性能开销。

SQLite中数据的类型按存储类型声明列名。

其存储类型包括:

存储类型 描述
NULL 空值。
INTERGER 有符号整数类型,值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.
REAL 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB 值是BLOB数据,如何输入就如何存储,不改变格式.

而亲和类型包括以下几种:

Affinity 描述
TEXT 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。
NUMBERIC 当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。
INTERGER 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。
REAL 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。
NONE 不做任何的转换,直接以该数据所属的数据类型进行存储。

.

加载SQLite

Qt自带的SQLite无账号密码可言,所以无需写

QString connectionName = QLatin1String("database");								//连接名
QSqlDatabase db;

if (QSqlDatabase::contains(connectionName))										//看是否已经连接过,有则直接连接该连接
	db = QSqlDatabase::database(connectionName);	
else {
	db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), connectionName);	//加载数据库
	db.setDatabaseName(QStringLiteral("./mosrun.db"));							//没有该文件就会自动创建
	if (!db.open()) {
		qWarning() << __FILE__ << __LINE__ << QStringLiteral("Error:") << db.lastError();		//若连接失败则打印原因
		return;
	}
}

QSqlQuery query(db);															//语句使用类

db.close();

.

SQL命令

事务

方法1:

db.transaction();
... 命令 ...
for
	query.exec("命令");
... 命令 ...
db.commit();		//提交
db.rollback();		//回滚

方法2:

query.exec(QStringLiteral("BEGIN TRANSACTION;"));
... 命令 ...
for
	query.exec("命令");
... 命令 ...
query.exec(QStringLiteral("COMMIT"));//提交
query.exec(QStringLiteral("ROLLBACK"));//回滚

.

数据库表名

一般来说,我们查询的时候只需要输入show tables;,就可以获取表格名,但是QSqlQuery只能获取表里数据,所以只需要通过db.tables();就能打印出表格名

.

命令

以下方法来源于Qt帮助文档以及自己少许修改

方法1

QSqlQuery query("SELECT country FROM artist");
while (query.next()) 
{
	QString country = query.value(0).toString();
	doSomething(country);
}

QSqlQuery query("SELECT * FROM artist");
int fieldNo = query.record().indexOf("country");
while (query.next()) 
{
    QString country = query.value(fieldNo).toString();
    doSomething(country);
}

方法2

QSqlQuery query("SELECT * FROM artist");
while (query.next()) 
{
    QString country = query.value("country").toString();
    doSomething(country);
}

方法3

QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (:id, :forename, :surname)");
query.bindValue(":id", 1001);
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();

方法4

QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (:id, :forename, :surname)");
query.bindValue(0, 1001);
query.bindValue(1, "Bart");
query.bindValue(2, "Simpson");
query.exec();

方法5

QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (?, ?, ?)");
query.bindValue(0, 1001);
query.bindValue(1, "Bart");
query.bindValue(2, "Simpson");
query.exec();

方法6

QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname) "
			  "VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Bart");
query.addBindValue("Simpson");
query.exec();

方法7

QSqlQuery query;
query.prepare("CALL AsciiToInt(?, ?)");
query.bindValue(0, "A");
query.bindValue(1, 0, QSql::Out);
query.exec();
int i = query.boundValue(1).toInt(); // i is 65

未完待续…文章来源地址https://www.toymoban.com/news/detail-521770.html

到了这里,关于Qt SQLite简单用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • qt 中sqlite的性能优化与使用问题

      SQLite 只支持一个并发的写入操作,但是多个进程可以同时连接和查询相同的数据库。 通过一些简单的配置和操作,我们完全可以使用 SQLite 创建 GB 级别的数据库并且支持高达每秒 10 万次的并发查询。 优化 SQLite 性能的配置如下: pragma journal_mode = WAL; 使用WAL而不是回滚日

    2024年02月02日
    浏览(22)
  • 在Qt5中SQLite3的使用

    什么是SQLite SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态

    2024年02月09日
    浏览(33)
  • QT-sql操作(sqlite数据库文件)

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

    2024年02月04日
    浏览(39)
  • QT程序设计多人聊天室(基于QT、sqlite3、TCP/IP)

    目录 技术路线 效果展示 程序主体 sqoperator.h mylogin.h myenroll.h chatinterface.h tips.h myapp.h ******************* sqoperator.cpp mylogin.cpp myenroll.cpp chatinterface.cpp tips.cpp myapp.cpp main.cpp widget.h widget.cpp main.cpp QT程序设计、sqlite数据库调用、TCP/IP客户端与服务端的搭建 通过次程序代码,可以学习如

    2024年02月09日
    浏览(50)
  • Win10下在Qt项目中配置SQlite3环境

    官网资源:SQLite Download Page 1、sqlite.h sqlite-amalgamation-3450000.zip (2.60 MiB) 2、sqlite3.def,sqlite3.dll  sqlite-dll-win-x64-3450000.zip (1.25 MiB) 3、 win10下安装sqlite3所需要文件 sqlite-tools-win-x64-3450000.zip https://www.sqlite.org/2024/sqlite-tools-win-x64-3450000.zip 将所有文件放在某一路径下的文件夹: 我就放

    2024年01月19日
    浏览(30)
  • 软件设计开发笔记4:QT操作SQLite数据库

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

    2024年02月09日
    浏览(51)
  • QT使用SQLite 超详细(增删改查、包括对大量数据快速存储和更新)

    在QT中使用sqlite数据库,有多种使用方法,在这里我只提供几种简单,代码简短的方法,包括一些特殊字符处理。在这里也给大家说明一下,如果你每次要存储的数据量很大,建议使用事务(代码中有体现),万条数据不到一秒吧。 数据库中有两个表一个是 class 和 student 。

    2024年02月03日
    浏览(36)
  • 【QT+QGIS跨平台编译】之一:【sqlite+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

    SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它

    2024年01月22日
    浏览(40)
  • Android Studio|使用SqLite实现一个简单的登录注册功能

    本学期学习了Android Studio这门课程,本次使用Android Studio自带的sqlite数据库实现一个简单的登录注册功能。 目录 一、了解什么是Android Studio? 二、了解什么是sqlite? 三、创建项目文件  四、创建活动文件和布局文件。 五、创建数据库,连接数据库  六、创建实体类,实现注

    2024年02月06日
    浏览(42)
  • 基于Qt数据库项目实现(Sqlite3为例)|考查数据库、表格(QTableView 显示)(进阶)

    01 数据库表格(QTableView 显示) 本小节设计一个生活中的例子,使用数据库修改/查询员工的编号、姓名、年龄、性别与照片信息。 本例将数据库的内容显示到 QTableView 上。如果只是简单的显示数据库的内容到QTableView 上,可以使用下面的方法,此方法 QTableView 上可以看到

    2024年02月20日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包