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的更多相关文章

  1. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  2. 【转】iOS开发系列--数据存取

    原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...

  3. iOS开发之数据存取3-CoreData自定义数据类型

    当系统提供的类型不能达到我们的使用要求时,比如我想在CoreData中存储UIColor,该怎么办呢? 这时候就要用到CoreData中非常强大的一个存储类型了:Transformable 下面将通过 ...

  4. iOS开发之数据存取2-CoreData后台查询数据

    注意:本人所讲的后台查询必须在使用CoreData时选择存储类型为“SQLite”,因为二进制或者XML存储方式会在打开的时候直接读到内存中. 1.CoreData数据后台查询出现的情况 CoreDa ...

  5. iOS开发之数据存取

    http://www.cocoachina.com/ios/20141111/10190.html

  6. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  7. iOS开发网络数据之AFNetworking使用

    iOS开发网络数据之AFNetworking使用 如何选择AFNetworking版本 首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少.AFNetw ...

  8. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  9. 李洪强iOS开发之数据存储

    李洪强iOS开发之数据存储 iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) ...

随机推荐

  1. 20141103--SQL主键,外键

    设置主键: 右键表→设计,在需要的列上右键→设置主键 或者在创建表的时候,在想要作为索引的列后面加上 primary key create table biao3 ( [No.] int primar ...

  2. UI1_UICollectionView

    // AppDelegate.m // UI1_UICollectionView // // Created by zhangxueming on 15/7/16. // Copyright (c) ...

  3. IC卡的逻辑卡号和市民卡卡号

    CPU卡,IC卡等的卡号与卡在出厂时的卡号.

  4. 《Apache数据传输加密、证书的制作》——涉及HTTPS协议

    首先了解http和https: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议. HTTPS和HTTP的区别: http是超文本传输协议,信息是明 ...

  5. mongodb学习之路1

    第一节 MongoDB介绍及下载与安装 引言 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似 json的b ...

  6. 分享:PHP数组排序总结

    本文内容:PHP二维数组排序,PHP数组排序总结. php数组排序是PHP学习中最基础也是最重要的一部分. 1.常规数组的排序 常规数组是指数组各元素均为字符串或数字,这与这样的数组,我们可以采用so ...

  7. PHP 图片文件上传代码分享

    分享下php上传图片文件的一段代码,挺不错的. 通过 PHP,可以把文件上传到服务器.加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 当然了,会禁止上传php文件,以及其它程序代 ...

  8. Oracle 摘去数据块的面纱

    Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00018000h 6 A2 0 0 0c 0 80 3 8b 61 15 0 0 0 3 4 type frmt spa ...

  9. python学习第二天第二部分

    一.变量:用来记录状态 变量值得变化即状态的变化,程序运行的本质就是来处理一系列状态的变化 python中所有数据都是对象 对象的三个特性: 身份(内存地址):用id()获取 类型:决定了该对象可以保 ...

  10. WPF 控件DataGrid绑定

    WPF 手动绑定 DataGrid 例子:前台:<DataGrid AutoGenerateColumns="False" Name="dataGrid1" ...