iOS- SQLite3的基本使用

2023-05-16

iOS- 简单说说iOS移动客户端SQLite3的基本使用
 1.为什么要使用SQLite3?                    
 
•大量数据需要存储
•管理数据,存储数据
 
SQLite是一种关系型数据库(也是目前移动客户端的主流数据库)
 
 
2.SQLite3的几种存储类型                    
 
 
a.NULL: 表示该值为NULL值
b.INTEGER: 无符号整型值
c.REAL: 浮点值
d.TEXT: 文本字符串
e.BLOB: 二进制数据(比如文件)
 
•实际上SQLite是无类型的,建表时声明或不声明类型都可以,也就意味着创表语句可以这么写:
create table t_student(name, age);
 
但为了保持良好的 编程规范,方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型
 
 
3.SQLite3的具体实现                      
 
3.1                                          
 
•在iOS中要使用SQLite3,需要添加库文件:libsqlite3.dylib并导入主头文件,这是一个C语言的库
 
3.2                                          
 
创建 数据库(sqlite3_opendb)
 
复制代码
 1 // 设置沙盒中的文件路径
 2     // 提示:在自己开发中,不要用.db结尾的sqlite数据库文件名
 3     NSString *dbPath = [@"readme.db" appendDocumentDir];
 4     NSLog(@"%@", dbPath);
 5     
 6     /**
 7      sqlite3_open
 8      
 9      1) 如果数据库存在,直接打开
10      2) 如果数据库不存在,先创建数据库文件,再打开
11      */
12     _db = NULL;
13     
14     if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {
15         NSLog(@"数据库打开成功");
16     } else {
17         NSLog(@"数据库打开失败");
18     }
复制代码
 
 
 
 
3.3                                            
 
1.单步执行操作(sqlite3_exec)
复制代码
#pragma mark 单步执行SQL
- (void)execSQL:(NSString *)sql message:(NSString *)message
{
    // 执行SQL语句
 
    char *errmsg = NULL;
    if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {
        NSLog(@"%@成功!", message);
    } else {
        // C语言中字符串输出应该用%s
        NSLog(@"%@失败 - %s", message, errmsg);
    }
}
复制代码
 
 
 
2.创建数据表
复制代码
1     // 1. 检查沙盒,判断数据库文件是否存在,如果存在就不再建表;
2     // 2. 数据库的方法:IF NOT EXISTS,放在表名之前即可
3     // 定义SQL语句
4     NSString *sql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)";
6     [self execSQL:sql message:@"创建数据表"];
复制代码
 
 
 
4.插入数据
1     // 1. SQL
2     NSString *sql = [NSString stringWithFormat:@"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)", person.name, person.gender, person.age, person.height];
3     
4     [self execSQL:sql message:@"新增个人记录"];
 
 
5.更新数据
复制代码
1 //修改
2 - (void)updatePerson:(Person *)person{
3     
4     
5     NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];
6     
7     [self execSQL:sql msg:@"修改"];
9 }
复制代码
 
 
6.删除数据
复制代码
1 //删除
2 - (void)removePerson:(NSInteger)personID{
3     
4     
5     NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];
6     
7     [self execSQL:sql msg:@"删除"];
9 }
复制代码
 
 
7.查询操作
–sqlite3_prepare_v2检查sql的合法性
–sqlite3_step逐行获取查询结果
–sqlite3_coloum_xxx获取对应类型的内容
–sqlite3_finalize释放stmt
复制代码
 1  // 1. SQL
 2     NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person";
 3     
 4     // 2. 查询语句通常是使用字符串拼接出来的
 5     // 因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!
 6     sqlite3_stmt *stmt = NULL;
 7     
 8     if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {
 9         NSLog(@"语法正确");
10         // 利用句柄,逐一查询符合条件的数据
11         // sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置
12         while (SQLITE_ROW == sqlite3_step(stmt)) {
13             // 取到行信息,逐一获取每一列的内容
14             // iCol对应的就是SQL语句中字段的顺序,从0开始
15             // 根据实际查询字段的属性,使用sqlite3_column_xxx取得对应的内容即可
16             int ID = sqlite3_column_int(stmt, 0);
17             const unsigned char *name = sqlite3_column_text(stmt, 1);
18             int age = sqlite3_column_int(stmt, 2);
19             int gender = sqlite3_column_int(stmt, 3);
20             CGFloat height = sqlite3_column_double(stmt, 4);
21             
22             // const unsigned char *直接输出看不出结果,需要转换
23             NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];
24             
25             Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];
26             
27             NSLog(@"%@", p);
28         }
29     } else {
30         NSLog(@"语法错误");
31     }
复制代码

转载于:https://www.cnblogs.com/someonelikeyou/p/3545962.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS- SQLite3的基本使用 的相关文章

  • http digest

    HTTP digest 摘要访问认证是一种协议规定的Web服务器用来同网页浏览器进行认证信息协商的方法 它在密码发出前 xff0c 先对其应用哈希函数 xff0c 这相对于HTTP基本认证发送明文而言 xff0c 更安全 从技术上讲 xff
  • 理解字节序

    1 计算机硬件有两种储存数据的方式 xff1a 大端字节序 xff08 big endian xff09 和小端字节序 xff08 little endian xff09 举例来说 xff0c 数值0x2211使用两个字节储存 xff1a
  • Solaris 10整合apache与php过程及出错处理

    Solaris 10 整合 apache 与 php 过程及出错处理 lt xml namespace prefix 61 o ns 61 34 urn schemas microsoft com office office 34 gt 作
  • 去百度API的百度地图准确叠加和坐标转换的解决方案研究

    文章版权由作者李晓晖和博客园共有 xff0c 若转载请于明显处标明出处 xff1a http www cnblogs com naaoveGIS 1 背景 目前项目上如果要使用百度地图 xff0c 得加载百度的开发包 xff0c 然后通过百
  • 7款纯CSS3实现的炫酷动画应用

    1 纯CSS3实现人物摇头动画 这次我们要来分享一款超级可爱的纯CSS3人物摇头动画 xff0c 初始化的时候人物的各个部位是利用CSS3动画效果拼接而成 xff0c 接下来就是人物听音乐的场景 xff0c 一边听音乐一边摇着脑袋 xff0
  • 快速将自己的应用程序做成安装包

    打包程序的方式多种多样 xff0c 比如大家常用的VS NSIS等等 xff0c 但对于一个简单的应用程序 xff0c 如果你不涉及复杂的安装设置 xff0c 那么压缩工具 xff0c 是个不错的选择 当然用压缩工具制作程序安装包已经不是什
  • 关于小程序websocket全套解决方案,Nginx代理wss

    需求对话 提问 我在本地web能够使用ws协议去链接websocket xff0c 但是小程序不能使用 回答 由于小程序使用的是SSL加密协议 xff0c 所以需要使用wss 这里wss与ws的关系就相当于https于http的关系 提问
  • 打印机主流的指令类型(ESC命令集+CPCL命令集+TSPL命令集)

    概述 打印指令 xff0c 又称打印控制命令 计算机通过打印控制语言 xff0c 以软件命令的方法来控制打印机操作 xff0c 解释执行打印数据 xff0c 获得打印结果的 对于打印机所实现的复杂功能而言 xff0c 打印控制语言是基础 它
  • Hive - truncate partition、drop partition 区别

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Hive 有两种方法删除指定parition的数据 xff1a truncate partition drop parition 功能 xff1a 两者都用于删除数据 xf
  • ca-bundle.crt文件,用于php发起外部https请求

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Bundle of CA Root Certificates Certificate data from Mozilla downloaded on Wed Aug 13
  • 执行truffle unbox react报错,出现Error: connect ECONNREFUSED 0.0.0.0:443问题的解决办法

    前提 xff1a 我是用的是MAC系统 xff0c 不知道使用windows系统是否也可以 react box 项目构建 localhost ReactDapp liyuechun truffle unbox react box Start
  • 如何合并PDF文件?教你几种超简单的方法

    如何合并PDF文件呢 xff1f 我们在工作中会遇到很多难以处理的文件 xff0c 比如PDF文件就是一种 xff0c 尤其是将多个PDF文件合并成一个PDF文件 xff0c xff0c 其实大多数人都不知道将其合并 xff0c 盲目的在网
  • not a valid identifier解决

    not a valid identifier不是有效的标识符 因为在 usr的 多加了一个空格 xff0c 导致JAVA Home 无法识别 转载于 https www cnblogs com wxd136 p 10332040 html
  • asp链接数据库[转]

    1 ASP连接Access数据库语句 Set Conn 61 Server CreateObject 34 ADODB Connection 34 Connstr 61 34 DBQ 61 34 43 server mappath 34 w
  • OpenGL纹理映射

    GLfloat xrot X 旋转量 GLfloat yrot Y 旋转量 GLfloat zrot Z 旋转量 GLuint texture 1 存储一个纹理 AUX RGBImageRec LoadBMP char Filename 载
  • 【转】设置Qt应用程序图标及应用程序名

    一直以来很纠结给qt应用程序添加图标问题 xff0c 在网上收过一次 xff0c 但是感觉不够完整 xff0c 现将自己的实现过程记录下 xff0c 以便以后查看 xff1a 通过网上的例子知道qt助手中有相关说明 xff1a Settin
  • studioone机架效果模板_贾爽的分享-贾爽:带你认识StudioOne机架自带的两个混响效果器!...

    作者姓名 xff1a 贾爽 xff0c 现居河南省南阳市 xff0c 音视频软硬件产品的意见领袖 xff0c 网络主播培训指导讲师 xff0c 爽哥KX驱动工具 制作者 xff0c 南阳标题网络技术有限公司创始人 xff0c 河南省流行音乐
  • HTTP认证用户名密码 php

    header 39 HTTP 1 1 401 Authorization Required 39 header 39 WWW Authenticate Basic realm 61 34 PHP Secured 34 39 用户名和口令列表
  • C++ 存储类

    C 43 43 存储类 存储类定义 C 43 43 程序中变量 函数的范围 xff08 可见性 xff09 和生命周期 这些说明符放置在它们所修饰的类型之前 下面列出 C 43 43 程序中可用的存储类 xff1a auto registe
  • 怎么在VS监视DataSet类型的数据

    旧版本 先监视DataSet xff0c 打开dataset dataset下面有一个tables Tables打开有一个非公共成员 xff0c 然后下面有一个List xff0c List中存储了每一张表的信息 下图所示的List下面的

随机推荐

  • Python网络爬虫5 - 爬取QQ空间相册

    自毕业后 xff0c 就再也没有用过QQ xff0c QQ空间里记录的是些并不精彩的青葱岁月 xff0c 但好歹也是份回忆 xff0c 近日想着学以致用 xff0c 用Python把QQ空间相册的所有照片爬取下来 xff0c 以作备份 分析
  • C++学习笔记 简单部分

    C 43 43 数据类型 使用变量来存储各种信息 xff0c 变量保留的是它所存储的值的内存位置 这意味着 xff0c 当创建一个变量时 xff0c 就会在内存中保留一些空间 这段内存空间可以用于存储各种数据类型 xff08 比如字符型 宽
  • springboot 2 Hikari 多数据源配置问题(dataSourceClassName or jdbcUrl is required)

    最近在项目中想试一下使用 Hikari 连接池 xff0c 以前用的是阿里的 Druid xff0c 框架是 Spring MVC xff0c xml配置文件方式注入的 Bean xff0c 现在换成 Spring Boot 之后 xff0
  • 完美解决 开机无法启动 提示0xc000000e 问题

    完美解决 开机无法启动 提示0xc000000e 问题 原文链接 xff1a http bbs ruanmei com thread 186874 1 1 html 摘要 xff1a 本文提供0xc000000e问题的解决方法和原理解释 x
  • 使用Jmeter输出错误响应结果到日志

    性能测试过程中 xff0c 我们经常需要知道高并发性能测试情况下 xff0c 系统报错 xff0c 返回的结果是什么 xff0c 帮助开发具体定位问题 一 操作步骤 xff1a 正确响应结果 我们可以自定义断言语句 xff0c 自动判断断言
  • 控制台报错 index:0,size:0

    源代码 xff1a service实现类 xff1a String select sql 61 34 select cguid case isrz when 1 then 39 PASS 39 when 0 then 39 FAIL 39
  • Ubuntu11.04上tftp服务的配置

    Ubuntu11 04 上tftp 服务的配置 2011 06 17 15 01 以前ubuntu 版本上的tftp 已经配置很多遍了 xff0c 详情可以参见 xff1a www mcuos com thread 646 1 2 html
  • 九套常规报表模型(转)

    九套常规报表模型 我们可以通过九大报表模型的组合 xff0c 快速完成大多数报表的设计 这九大模型分别为 xff1a 列表 分组 主从 嵌套 交叉 图形 套打 分栏 填报 本文将重点对这九大模型的特征及适用范围进行阐述 1 列表 列表是报表
  • 利用for循环打印实心棱形和空心棱形

    一 要求 xff1a 提示用户输入棱形的行数 xff0c 比如输入5时 xff0c 打印如下实心棱形和空心棱形 xff08 由于排版问题 xff0c 可能显示会有变形 xff09 xff1a 二 分析 xff1a A 图形是上下对称的 B
  • Faiss教程:GPU

    Fassi通过CUDA支持GPU xff0c 要求3 5以上算力 xff0c float16要求CUDA7 5 43 通过index gpu to cpu可以将索引从GPU复制到CPU xff0c index cpu to gpu 和 in
  • 浏览器的强缓存与弱缓存

    在浏览器众多缓存中的HTTP缓存可能很多人对这个的概念并没有很清晰 xff0c 每个人都知道进入一次网页之后再刷新一次页面 xff0c 加载速度会比首次加载快非常多 xff0c 每个人都知道这是浏览器缓存的magic xff0c 但是对此背
  • 密钥协商(密钥交换)机制的讲解

    国标文件涉及密钥协商算法的函数 生成密钥协商参数并输出计算会话密钥产生协商数据并且计算会话密钥 密钥协商 xff08 交换 xff09 算法及其原理 密钥交换 协商目的 密钥协商机制 是 xff1a xff08 在身份认证 的前提下 xff
  • 基于牛客网Js v8引擎提供的读/写方法做的调试页面

    项目地址 正直秋招季 xff0c 对找工作的人来说 xff0c 牛客网肯定不陌生 xff0c 现在很多大型互联网公司的在线笔试都是在牛客网上面进行的 xff08 好像有打广告的嫌疑 xff09 Js有那么多的操作数据结构的api xff0c
  • 本地调试spark报org.apache.hadoop.io.nativeio.NativeIO$Windows.createFile...

    本地调试spark xff0c saveAsText 报错 org apache hadoop io nativeio NativeIO Windows createFileWithMode0 Ljava lang String xff1b
  • Element表格分页数据选择+全选所有完善批量操作

    后台管理系统中的列表页面 xff0c 一般都会有对列表数据进行批量操作的功能 xff0c 例如 xff1a 批量删除 批量删除等 之前项目中只是简单的用到Element框架中常规的属性 事件 在一次机缘巧合下 xff0c 了解到一个公司内部
  • idea本地调试web报“There is no configured/running web-servers found! Please, run any web-config”...

    为什么80 的码农都做不了架构师 xff1f gt gt gt 本文永久更新地址 xff1a https my oschina net bysu blog 3051091 1 按照网上的各种配置 如下图 还是不行 2 网上还说要先run才行
  • Visual Studio Code语言设置为中文

    1 Visual Studio Code下载安装 https code visualstudio com 2 语言设置 2 1 快捷键 Windows Linux 快捷键是 xff1a ctrl 43 shift 43 p macOS 快捷
  • 查看zookeeper注册中心是否有注册服务

    为什么80 的码农都做不了架构师 xff1f gt gt gt 查看zookeeper注册中心是否有注册服务可以在服务器上看 xff0c 也可以在dubboadmin看哦 1 在服务器上看 xff1a 1 xff09 查找zookeeper
  • matplotlib 设置图形大小时 figsize 与 dpi 的关系

    matplotlib 中设置图形大小的语句如下 xff1a fig 61 plt figure figsize 61 a b dpi 61 dpi 其中 xff1a figsize 设置图形的大小 xff0c a 为图形的宽 xff0c b
  • iOS- SQLite3的基本使用

    iOS 简单说说iOS移动客户端SQLite3的基本使用 1 为什么要使用SQLite3 xff1f 大量数据需要存储 管理数据 xff0c 存储数据 SQLite是一种关系型数据库 xff08 也是目前移动客户端的主流数据库 xff09