ios开发之数据存取1-SQLite
iOS开发中常用的数据存取方式有:
XML属性列表-PList
NSKeyedArchiver 归档
Preference-偏好设置
SQLite3
Core Data-以面向对象的方式操作数据库SQLite
1、SQLite3简介
> SQLite属于嵌入式的关系型数据库

> SQL语句
- SQL(structured query language):结构化查询语言,一种对关系型数据库中的数据进行定义和操作的句法
- 要操作和访问数据库中存储的数据,必须编写SQL语句
- SQL语句是不区分大小写的
- SQL语句都以分号结尾
- 数据定义语言-DDL Data Definition Language 其语句包括动词CREATE 和 DROP,用于在数据库中创建新表或删除表-CREATE TABLE 或 DROP TABLE
- 数据操作语言-DML Data Manipolation Language 其语句包括INSERT,UPDATE,DELETE,也成为动作查询语言
- 数据查询语言-DQL Data Query Language 也成为“数据检索语句”,用以从表中获取数据 - 保留字SELECT 是DQL用的最多的动词,其它DQL保留字还有WHERE,ORDER BY, GROUP BY 和 HAVING
> SQLite3使用步骤
名词解释:handle句柄,在C语言中,通常把用于控制某类东西的叫做句柄,实际上是一个指针,通过这个指针就可以达到操作对象的目的。
SQLITE_OK 表示数据库操作成功
导入libsqlite3.dylib框架,并引入头文件<sqlite3.h>
1、要使用数据库,首先要创建或者打开一个数据库
> 数据库的存放位置问题
* 如果是只查询不修改的数据库,可以放在MainBundle(只读)里
* 如果需要对数据库进行操作,数据文件应该放在沙盒中
> sqlite3_open 打开数据库
* 如果数据库已经存在,直接打开
* 如果数据库不存在,新建一个空白的数据库,然后打开
#pragma mark 打开数据库
- (void)openDB
{
// 设置沙盒中的文件路径
// 提示:在自己开发中,不要用.db结尾的sqlite数据库文件名
NSString *dbPath = [@"readme.db" appendDocumentDir];
NSLog(@"%@", dbPath); /**
sqlite3_open 1) 如果数据库存在,直接打开
2) 如果数据库不存在,先创建数据库文件,再打开
*/
_db = NULL; // sqlite3 *_db; 数据库句柄 成员变量 if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {
NSLog(@"数据库打开成功");
} else {
NSLog(@"数据库打开失败");
}
}
2、创建数据表
> 定义数据操作SQL
> 调用sqlite3_exec执行SQL
为了避免重复建表,可以在建表的SQL语句中增加 IF NOTEXISTS
// 避免重复建表的思路
// 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)";
3、单步执行操作
1> 增加数据
2> 修改数据
3> 删除数据
定义SQL语句,然后执行 SQLITE_OK == sqlite3_exec
4、查询语句
1> 准备SQL语句
// sql 注意, %@ 字符串需要用 '' 包起来
NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO T_Person (name, age, height) VALUES ('%@', %d, %.2f)", person.name, person.age, person.height]; const char *sql = [sqlString UTF8String];
2> 检查SQL语句是否正确 sqlite3_prepare_v2
SQLITE_API int sqlite3_prepare_v2(
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL statement, UTF-8 encoded */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
);
3> 单步执行,一次获取查询到的记录 SQLITE_ROW == sqlite3_step(stmt)
while (sqlite3_step(_stmt) == SQLITE_ROW)
4> 按照查询顺序,依次取出每一个字段的内容
sqlite3_column_text 取字符串
sqlite3_column_int 取整数
sqlite3_column_double 取浮点数
char *name = (char *)sqlite3_column_text(_stmt, );
float height = sqlite3_column_double(_stmt, );
int age = sqlite3_column_int(_stmt, );
int ID = sqlite3_column_int(_stmt, );
总结: SQLite操作的主要步骤为:
1、定义sql语句
2、检查sql语句语法是否有问题 sqlite3_prepare_v2
3、执行sql语句 sqlite3_exec
ios开发之数据存取1-SQLite的更多相关文章
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
- 【转】iOS开发系列--数据存取
原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...
- iOS开发之数据存取3-CoreData自定义数据类型
当系统提供的类型不能达到我们的使用要求时,比如我想在CoreData中存储UIColor,该怎么办呢? 这时候就要用到CoreData中非常强大的一个存储类型了:Transformable 下面将通过 ...
- iOS开发之数据存取2-CoreData后台查询数据
注意:本人所讲的后台查询必须在使用CoreData时选择存储类型为“SQLite”,因为二进制或者XML存储方式会在打开的时候直接读到内存中. 1.CoreData数据后台查询出现的情况 CoreDa ...
- iOS开发之数据存取
http://www.cocoachina.com/ios/20141111/10190.html
- IOS开发-UI学习-sqlite数据库的操作
IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...
- iOS开发网络数据之AFNetworking使用
iOS开发网络数据之AFNetworking使用 如何选择AFNetworking版本 首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少.AFNetw ...
- IOS开发中数据持久化的几种方法--NSUserDefaults
IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...
- 李洪强iOS开发之数据存储
李洪强iOS开发之数据存储 iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) ...
随机推荐
- 利用 Google API 调用谷歌地图 演示1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【学习笔记】【C语言】逻辑运算符
有时候,我们需要在多个条件同时成立的时候才能执行某段代码,比如:用户只有同时输入了QQ和密码,才能执行登录代码,如果只输入了QQ或者只输入了密码,就不能执行登录代码.这种情况下,我们就要借助于C语言提 ...
- VC中调用COM组件的方法(转载)
原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...
- java中从1000万个随机数中查找出相同的10万个随机数花的最少时间
偶然在群里看到有人问到大数据查询,自己也就想了小艾改如何解决,从从1000万个随机数中查找出相同的10万个随机数花的最少时间, 谈到效率,自然是hashmap莫属. import java.util. ...
- 1_1准备工作[wp8特色开发与编程技巧]
1准备工作 大家好,我是徐文康,今天我要开始带大家玩转windowsphone8 app的开发 在这一套视频中,我将带大家从零开始学习编程.在互联网时代熟悉编程是非常有必要的.差异化竞争将变成趋势,那 ...
- 大神是如何玩C语言的!
我在酷壳上看到一篇文章,C语言结构体里的成员数组和指针,看得感觉让我真是佩服地五体投地啊.皓哥虽说谦称自己不是高手啥的,但是写出这样的文章来,真是让我感觉自己的水平真是渣渣!我看完了感觉有点小激动,也 ...
- Windows Server 2003 IIS支持ASP
1.ASP支持是很简单的 这里简单的说一下 2.安装IIS服务 这里就不多演示了 很简单的 3.安装完成后打开IIS的扩展功能 ASP代码测试页为: <% response.write( ...
- jQuery 添加元素和删除元素
jQuery - 添加元素 append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元 ...
- [大牛翻译系列]Hadoop(4)MapReduce 连接:选择最佳连接策略
4.1.4 为你的数据选择最佳连接策略 已介绍的每个连接策略都有不同的优点和缺点.那么,怎么来判断哪个最适合待处理的数据? 图4.11给出了一个决策树.这个决策树是于论文<A Compariso ...
- php session偶尔写入失败的原因
session_start(); var_dump($_SESSION); $key = sprintf('%05d', mt_rand(0, 99999)); $key = strval($key) ...