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     }
复制代码

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

  1. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  2. iOS sqlite3数据库解析

    看来从版本3.3.1基本上已经支持线程句柄的传递功能.具体限制我标记了一下.(6) Is SQLite threadsafe?SQLite is threadsafe. We make this co ...

  3. iOS Sqlite3 Demo 及 FMDB Demo

    本文是主要实现了三个函数: testSQLite3 是测试系统自带的sqlite3的demo testFMDB是测试FMDB存取简单的数据类型的 的demo testFMDB2是将任意对象作为一个整体 ...

  4. ios sqlite3的简单使用

    第一:创建表格 //创建表格 -(void)creatTab{ NSString*creatSQL=@"CREATE TABLE IF NOT EXISTS PERSIONFO(ID INT ...

  5. iOS——sqlite3的使用(iOS嵌入式关系数据库)

    1>添加sqlite3动态库:libsqlite3.dylib,CoreGraphics.framework,UIKit.framework,Foundation.framework 2> ...

  6. iOS SQLite3的使用

    1.创建可修改的数据库文件 //应用包内的内容是不可写的,所以需要把应用包内的数据库拷贝一个副本到资源路径去 - (void)createEditableDatabase{ BOOL success; ...

  7. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  8. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  9. iOS 数据存储之SQLite3的使用

    SQLite3是iOS内嵌的数据库,SQLite3在存储和检索大量数据方面非常有效,它使得不必将每个对象都加到内存中.还能够对数据进行负责的聚合,与使用对象执行这些操作相比,获得结果的速度更快. SQ ...

  10. IOS 使用wxsqlite3为sqlite3数据库加密

    1,下载wxsqlite3 地址http://jaist.dl.sourceforge.net/project/wxcode/Components/wxSQLite3/wxsqlite3-3.1.1. ...

随机推荐

  1. Dagger学习笔记

    @Inject 提供依赖的构造函数,或者需要依赖的成员变量 @Module 提供依赖,实例化的地方( 使用module实例化,方便测试的时候替换成其他对象,而这也是和构造方法注入的区别,如果用构造方法 ...

  2. 时隔3年,再次折腾BlackBerry 8830!

    2010年手头换得8830,之后就是好几番刷机.解SPC.倒腾各种软件..算软件注册码..那个时候记得最难弄的注册码就是crunchSMS.需要运行虚拟机来从内存地址读取注册码..不过黑莓真的很经得起 ...

  3. webconfig文件serviceHostingEnvironment节点出错的解决方法

    在三点五和二版本的配置中可以出现这个节点,但是在4.0是没有的,所以如果框架是4.0的时候要除去这个节点,不然就会报以下错误: Configuration Error Description: An ...

  4. HDU1712简单的分组背包

    HDU1712http://acm.hdu.edu.cn/showproblem.php?pid=1712 简单的分组背包 #include <map> #include <set& ...

  5. My集合框架第五弹 最小堆

    二叉堆(以最小堆为例),其具有结构性质和堆序性质结构性质: 堆是一棵完全的二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,高度为log N            而且该结构可以很容易的使用数 ...

  6. cf754 A. Lesha and array splitting

    应该是做麻烦了,一开始还没A(幸好上一次比赛水惨了) #include<bits/stdc++.h> #define lowbit(x) x&(-x) #define LL lon ...

  7. opennebula 创建模板【配置集群、配置VNC、配置RAW、配置SSH】

    { "vmtemplate": { "NAME": "bbbb", "MEMORY": "512", ...

  8. HTTP(一) 连接管理

    ・HTTP是如何使用TCP连接的 HTTP传送一条报文时,以流的形式将报文数据内容通过一条打开的TCP连接按序传输. TCP收到数据流之后,由TCP/IP软件将数据流砍成被称作段的小数据块,并将段封装 ...

  9. 栈的应用-四则表达式(C#代码实现)

    ->概念 中缀表达式 9+(3-1)*3+10/2 转换步骤 9 + 9 + ( 9 3 + ( - 9 3 1 + ( - ) 9 3 1 - + 9 3 1 - + * 9 3 1 - 3 ...

  10. (1) css的核心基础

     css的核心基础 1.css的基本语法在具体使用css之前,请各位兄弟姐妹先思考一个生活中的问题,一般情况下我们是如何描述一个人的呢? 小明{ 民族:汉族: 性格:温柔: 性别:男: 体重:68kg ...