热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IOSswift版sqlite3详解

IOS中的SQLite3的封装与详细应用SQLite是一个开源的嵌入式关系数据库,特点是易使用、高效、安全可靠、可移植性强。IOS中的本地持久化存储NSUserDefault:一般

IOS中的SQLite3的封装与详细应用

SQLite是一个开源的嵌入式关系数据库,特点是易使用、高效、安全可靠、可移植性强。

IOS中的本地持久化存储

NSUserDefault:一般用于存储小规模数据、业务逻辑弱的数据。

keychain: 苹果提供的可逆存储,因为有着只要app不重装系统、可以同步iCloud的特性,一般用来对用户的标识符或者一些需要加密的小数据进行存储。

归档:主要原理是对数据进行序列化、反序列化操作后,写入、读出数据。方便便捷易使用,缺点查询、更改数据耗时耗性能。

数据库:主要的有三种sqlite3、core data、realm。其中core data只是xcode对sqlite的界面化的封装原理相似

关于sqlite本文将主要介绍。

SQLite3中主要函数介绍

sqlite3_open(文件路径,sqlite3 **):文件名若不存在,则会自动创建

sqlite3_close(sqlite3 *):关闭数据库

sqlite3__finalize(sqlite3_stmt *pStmt): 释放数据库

sqlite3_errmsg(sqlite3*):输出数据库错误

sqlite3__exec(sqlite3,const char *sql, sqlite3_callback,void,char **errmsg):

参数1:open函数得到的指针。

参数2:一条sql语句

参数3:sqlite3_callback是回调,当这条语句执行后,sqlite3会调用你提供的这个函数,回调函数

参数4:void *是自己提供的指针,可以传递任何指针到这里,这个参数最终会传到回调函数里面,如果不需要传到回调函数里面,则可以设置为NULL

参数5:错误信息,当执行失败时,可以查阅这个指针

sqlite3_prepare_v2(sqlite3 *db,const char *zSql, int nByte,sqlite3_stmt **ppStmt,const char **pzTail):

参数3:表示前面sql语句的长度,如果小于0,sqlite会自动计算它的长度

参数4:sqlite3_stmt指针的指针,解析后的sql语句就放在该结构里

参数5:一般设为0

sqlite3_step(sqlite3_stmt*):

参数为sqlite3_prepare_v2中的sqlite3_stmt

返回SQLITE_ROW 表示成功

sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void()(void)):

参数1:sqlite3_prepare_v2中的sqlite3_stmt

参数2:对应行数

参数3:对应行数的值

参数4:对应行数的值的长度,小于0自动计算长度

参数5:函数指针,主要处理特殊类型的析构

sqlite3_key( sqlite3 *db, const void *pKey, int nKey)

参数2:密钥

参数3:密钥长度

swift与c的类型转换

int => CInt

char => CChar / CSignedChar

char* => CString

unsigned lOng= > CUnsignedLong

wchar_t => CWideChar

double => CDouble

T* => CMutablePointer

void* => CMutableVoidPointer

const T* => CConstPointer

const void* => CConstVoidPointer

等等

创建或者打开数据库

程序中‘db’不能为空,如果为空,表示打开数据库失败或者关闭了数据库。

《IOS swift版 sqlite3详解》

通过sql执行数据库操作

由于防止多线程操作数据库,每次执行数据库操作添加同步锁。

sqlite3_exec函数基本上支持所有的数据库执行语句除了含有特殊类型的数据(二进制),含有特殊类型的数据会采用另一种方式处理下面会阐述。

《IOS swift版 sqlite3详解》

查询数据库

按照数据库的行数依次查询,输出sql条件的所有数据

《IOS swift版 sqlite3详解》

引入事务,加快数据库写入

事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。

事务(Transaction)是指一个或多个更改数据库的扩展。例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事务。重要的是要控制事务以确保数据的完整性和处理数据库错误。

实际上,您可以把许多的 SQLite 查询联合成一组,把所有这些放在一起作为事务的一部分进行执行

BEGIN TRANSACTION开启一个事务

COMMIT TRANSACTION提交事务是否成功

ROLLBACK TRANSACTION回滚事务,当数据库事务操作失败后,还原之前的操作。

注意:事务并不能批量优化查询速度。

《IOS swift版 sqlite3详解》

SQLite3支持有限的 ALTER TABLE 操作

SQLite 有有限地 ALTER TABLE 支持。你可以使用它来在表的末尾增加一列,可更改表的名称。 如果需要对表结构做更复杂的改变,则必须重新建表。重建时可以先将已存在的数据放到一个临时表中,删除原表, 创建新表,然后将数据从临时表中复制回来。在增加表列时,需注意:因为app在市场上存在许多版本,各个版本的数据库表的结构可能存在梯度的差异,代码中使用就需要加入版本控制了。例如代码中添加一个‘id’字段。

《IOS swift版 sqlite3详解》

SQLite3中添加索引

《IOS swift版 sqlite3详解》

处理Dada类型数据

sqlite3__exec函数并不是万能的,它就无法处理二进制数据。处理二进制数据,需要的是另一种方法。

先对表的数据解析然后绑定到结构体中,然后对数据库进行INSERT DELETE 或者 UPDATE操作。

《IOS swift版 sqlite3详解》

SQLite3的一些小坑

1.SQL 标准规定,在字符串中,单引号需要使用逃逸字符(”),即在一行中使用两个单引号。

2.每次操作完数据库记得关闭数据库,防止多个数据库混淆。

SQLite3中查询效率优化

1.添加索引 在demo中测试发现,插入50000行数据,同时做查询时发现,添加索引耗时76s,不添加花费256s。添加索引需注意:

添加索引的原则是为了查询更加快,但是一张表内不能创建太多索引,因为索引只增加了相应的 select 的效率,但同时也降低了 insert 及 update 的效率,一个表的索引数最好不要超过6个。

在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使 用,并且应尽可能的让字段顺序与索引顺序相一致。

2.在使用索引字段时,需要避免使用OR/BETWEEN/LIKE这些语法,这样会避免使用索引而对表进行全局扫描。如demo中使用like语法与‘==’插入50000行数据,同时做查询时,对比发现分别耗时546s和76s。

SQLite3加密

使用SQLCipher链接地址这个第三方库对数据库进行加密。

sqlite3_key 加密函数

sqlite3_rekey 修改密码

最后

《IOS swift版 sqlite3详解》

上图为2017年最新的视频教程资料,搜索2352149755加我好友私聊我上传视频教程,有什么不懂的也可以来私聊问我。

不定时更新中。

如果你能明白这些视频资料的好差,那么你也算是入行了,底层和中高层就是这一步之差。


推荐阅读
  • Python使用SQLite1.sqlite3的安装python2.5.x以上版本默认自带sqlite3模块。2.链接sqlite3数据库```#导入sqlite3模块import ... [详细]
  • mybatis相关面试题 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
  • Java 中SimpleDateFormat 错误用法及改正 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • 我正在一个涉及SQLite的项目中,我只有一个数据库文件,现在我正在测试我的应 ... [详细]
  • 在Android Studio中查看SQLite数据库
    原来查看数据库内容,我们一般都是将数据库文件从手机导出,再用专门的软件打开查看,比较繁琐。最近发现了一个比较方便的方法:使用工具stetho。使用方式在gradle中配置depen ... [详细]
  • SQLite–CONSTRAINTS(约束)约束是数据列在表上执行的规则。这些是用来限制的数据类型可以进入一个表。这样可以确保数据的准确性和可靠性在数据库中。    级或表级约束可 ... [详细]
  • 有没有人用过sqlite?关于tablehasnocolumnnamedcolumn插入数据的时候报上边的错。问题是我明明有这一列。直接在sqlitedevoloper里执 ... [详细]
  • Python与MySQL交互指南:从基础到进阶
    本文深入探讨了Python与MySQL数据库的集成方法,包括数据库连接、数据表创建、索引管理、数据操作以及如何防止SQL注入等关键内容。适合初学者及希望提升数据库操作技能的开发者。 ... [详细]
  • 本文详细介绍了在旧电脑上设置U盘启动的方法,包括通过BIOS设置和使用快捷键两种方式,同时提供了针对不同品牌电脑的具体操作步骤。 ... [详细]
  • 本文旨在探讨Linux系统中两种重要的进程间通信(IPC)机制——System V和POSIX的标准及其特性,为开发者提供深入的理解。 ... [详细]
  • 微服务架构详解及其入门指南
    本文详细介绍了微服务的基本概念、发展历程、与传统架构的区别及优势,并探讨了适合采用微服务架构的场景。此外,文章还深入分析了几个主流的微服务开发框架,特别是Spring Cloud的组成和特点。 ... [详细]
author-avatar
威哥028_438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有