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)

 // 设置沙盒中的文件路径
// 提示:在自己开发中,不要用.db结尾的sqlite数据库文件名
NSString *dbPath = [@"readme.db" appendDocumentDir];
NSLog(@"%@", dbPath); /**
sqlite3_open 1) 如果数据库存在,直接打开
2) 如果数据库不存在,先创建数据库文件,再打开
*/
_db = NULL; if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {
NSLog(@"数据库打开成功");
} else {
NSLog(@"数据库打开失败");
}

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. 检查沙盒,判断数据库文件是否存在,如果存在就不再建表;
// 2. 数据库的方法:IF NOT EXISTS,放在表名之前即可
// 定义SQL语句
NSString *sql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)"; [self execSQL:sql message:@"创建数据表"];
 
4.插入数据
     // 1. SQL
NSString *sql = [NSString stringWithFormat:@"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)", person.name, person.gender, person.age, person.height]; [self execSQL:sql message:@"新增个人记录"];
5.更新数据
 //修改
- (void)updatePerson:(Person *)person{ NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID]; [self execSQL:sql msg:@"修改"]; }
6.删除数据
 //删除
- (void)removePerson:(NSInteger)personID{ NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID]; [self execSQL:sql msg:@"删除"]; }
7.查询操作
–sqlite3_prepare_v2检查sql的合法性
–sqlite3_step逐行获取查询结果
–sqlite3_coloum_xxx获取对应类型的内容
–sqlite3_finalize释放stmt
  // 1. SQL
NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person"; // 2. 查询语句通常是使用字符串拼接出来的
// 因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!
sqlite3_stmt *stmt = NULL; if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -, &stmt, NULL)) {
NSLog(@"语法正确");
// 利用句柄,逐一查询符合条件的数据
// sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置
while (SQLITE_ROW == sqlite3_step(stmt)) {
// 取到行信息,逐一获取每一列的内容
// iCol对应的就是SQL语句中字段的顺序,从0开始
// 根据实际查询字段的属性,使用sqlite3_column_xxx取得对应的内容即可
int ID = sqlite3_column_int(stmt, );
const unsigned char *name = sqlite3_column_text(stmt, );
int age = sqlite3_column_int(stmt, );
int gender = sqlite3_column_int(stmt, );
CGFloat height = sqlite3_column_double(stmt, ); // const unsigned char *直接输出看不出结果,需要转换
NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name]; Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height]; NSLog(@"%@", p);
}
} else {
NSLog(@"语法错误");
}

作者: 清澈Saup
出处:http://www.cnblogs.com/qingche/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

iOS- 简单说说iOS移动客户端SQLite3的基本使用的更多相关文章

  1. 一步一步拆解一个简单的iOS轮播图(三图)

    导言(可以不看): 不吹不黑,也许是东半球最简单的iOS轮播图拆分注释(讲解不敢当)了(tree new bee).(一句话包含两个人,你能猜到有谁吗?提示:一个在卖手机,一个最近在卖书)哈哈... ...

  2. iOS 简单工厂模式

    iOS 简单工厂模式 什么是简单工厂模式? 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作.工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传 ...

  3. 【iOS 初见】第一个简单的 iOS 应用

    本实例来自 <iOS编程(第4版)>,介绍如何编写一个简单的 iOS 应用. 功能为:在视图中显示一个问题,用户点击视图下方的按钮,可以显示相应的答案,用户点击上方的按钮,则会显示一个新的 ...

  4. 简单讲解iOS应用开发中的MD5加密的相关使用

      简单讲解iOS应用开发中的MD5加密的相关使用   作者:文顶顶 字体:[增加 减小] 类型:转载 时间:2015-12-19 我要评论 这篇文章主要介绍了iOS应用开发中的MD5加密的相关使用, ...

  5. iOS 简单引导界面

    代码地址如下:http://www.demodashi.com/demo/11607.html 前言 现在很多APP在用户第一次用的时候,由于用户可能并不知道其中一些功能点的时候,这个时候就需要我们来 ...

  6. IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)

    IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...

  7. iOS开发 - 兼容iOS 10

    1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...

  8. iOS 1 到 iOS 10 ,我都快老了

    iOS 1:iPhone诞生 虽然很难想像,但初代iPhone在问世时在功能方面其实远远落后于那时的竞争对手,比如Windows Mobile.Palm OS.塞班.甚至是黑莓.它不支持3G.多任务. ...

  9. IOS学习之IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...

  10. IOS 动画专题 --iOS核心动画

    iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...

随机推荐

  1. centos7.3 vsftpd 多用户配置

    1. 安装vsftpd及pam认证服务软件 yum install vsftpd* -y yum install pam* libdb-utils libdb* --skip-broken -y #设 ...

  2. linux 通过 openconnect 来连接学校内网

    参考 http://xingda1989.iteye.com/blog/1969908 https://blog.csdn.net/edin_blackpoint/article/details/70 ...

  3. LeetCode初级算法的Python实现--动态规划

    动态规划的本质是递归:所以做题之前一定要会递归:递归式就是状态转移方程:这里将会介绍使用动态规划做题的思维方式. 统一的做题步骤: 1.用递归的方式写出代码:(此方法写的代码在leetcode中一定会 ...

  4. 【NIS】深入了解NIS

    1  简介 NIS( NetworkInformation Service)提供了一个网络黄页的功能,当用户登录系统时,Linux系统会到NIS主机上去寻找用户使用的帐号密码信息加以比对,以提供用户登 ...

  5. 单目、双目和RGB-D视觉SLAM初始化比较

    无论单目.双目还是RGB-D,首先是将从摄像头或者数据集中读入的图像封装成Frame类型对象: 首先都需要将彩色图像处理成灰度图像,继而将图片封装成帧. (1) 单目 mCurrentFrame = ...

  6. Redis系列六 Redis事务

    Redis事务 1.介绍 在Redis事务中可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 2.事务的作用 一个队列中, ...

  7. L010小结后自考题

    . 查询2号分区的inode和block的数量和尺寸 . 在lcr文件夹下创建一个a文件夹,然后进入文件夹中,创建3个3层目录,5个1层目录,5个文件 . 滤出a文件夹下的所有一级目录(4种方法) . ...

  8. python 水仙花

    #简单def narcissus(): for n in range(100, 1000, 1): a, b, c = n//100, (n//10)%10, (n%100)%10 if a ** 3 ...

  9. Ubuntu目录与权限

    Ubuntu目录 / /bin /sbin /boot /etc /mnt /home d :directory - :file b :block  磁盘以块进行 l :link Ubuntu权限 U ...

  10. TW实习日记:第20-21天

    为什么上周五没写呢,因为上周五一直在熟悉业务流程...根本不会写一些复杂的业务代码,因为没有业务流程图!!!在学校的上需求分析和UML建模课的时候,还有软件工程课的时候,想着这都什么鬼啊,听来干嘛,写 ...