1. 前言
  2. 需求描述
  3. 开发测试环境
  4. FMDB介绍
  5. 创建工程

一、前言

上一章介绍了如何开发一个IOS应用的入门案例教程:

                    我的第一个IOS开发应用 
 
  本章主要将介绍如何使用sqlite,来进行本地持久化存储数据。
 

二、需求描述

在游戏开始一段时间后,我们需要存储角色的基础信息,以便我休息之后继续进行上次的旅途。

三、开发环境介绍

OS X EI Captian:10.11.4

Xcode: 7.3
ios:9.3
机型:iphone 6s/iphone 6s plus

四、FMDB介绍

iOS中的数据持久化方式,基本上有以下四种:

1. 属性列表
2. 对象归档
3. SQLite3
4. Core Data

本文主要介绍如何使用“SQLite3” 持久化方式。

SQLite:是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它的减少应用程序管理数据的开销,
SQLite可移植性好,很容易使用,很小,高效而且可靠。
参考地址:http://www.sqlite.org/ FMDB:iOS、macOS开源的第三方库对SQLite的操作进行了封装。
参考地址:https://github.com/ccgus/fmdb.git

五、创建工程

Xcode 英文版:

1.“Create a new Xcode project”

2.“Choose a template for your new project”>  iOS > Application > Single View Application

3. “Choose options for your new project”

Bundle Identifier:cn.oshine.ios.Lesson02,

Language : Objective-C ,

Devices: iPhone ,

Use Core Data: No,

include Unit Tests:  No,

include UI Tests: No

4. "Select Folder To Create"

下载FMDB,FMDB的目录结构

把fmdb.xcodeproj拖动到工作区中。

Lesson02 TARGETS  :

Build Pharses:

Target Dependencies > FMDB iOS(fmdb)

Link Binary With Libraries > libsqlite3.0.tbd

Link Binary With Libraries > libFMDB-iOS.a

引入头文件:

#import <Foundation/Foundation.h>

#import "fmdb/FMDB.h"

#import <sqlite3.h>

创建数据库:

FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];

if (![db open]) {

         NSLog(@"OPEN FAIL");

        return;

}

关闭数据库:

[db close];

创建表:

 [db executeUpdate:@"CREATE TABLE IF NOT EXISTS profile(name text,val text)"];

插入记录:

  [db beginTransaction];

    [db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"HP",@""];

    [db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"MP",@""];

    [db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"攻击",@""];

    [db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"防御",@""];

    [db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"攻速",@"0.3"];

    [db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"移速",@""];

    [db commit];

读取记录:

 FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];

    if (![db open]) {

        NSLog(@"OPEN FAIL");

        return;

    }

    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];

    FMResultSet *rs = [db executeQuery:@"SELECT name,val FROM profile"];

    while ([rs next]) {

        [dictionary setObject:[rs stringForColumn:@"val"] forKey:[rs stringForColumn:@"name"]];

    }

    [rs close];

    [db close];

案例界面:

案例代码:

运行结果:

ViewController.h

//
// ViewController.h
// Lesson02
//
// Created by ouyangjunqiu on 16/4/7.
// Copyright © 2016年 oshine. All rights reserved.
// #import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "fmdb/FMDB.h"
#import <sqlite3.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UILabel *label; - (IBAction)createTable:(id)sender; - (IBAction)initRole:(id)sender; - (IBAction)readProfile:(id)sender; @end

ViewController.m

//
// ViewController.m
// Lesson02
//
// Created by ouyangjunqiu on 16/4/7.
// Copyright © 2016年 oshine. All rights reserved.
// #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)createTable:(id)sender {
FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; if (![db open]) {
NSLog(@"OPEN FAIL");
return;
} [db executeUpdate:@"CREATE TABLE IF NOT EXISTS profile(name text,val text)"];
[db close];
} - (IBAction)initRole:(id)sender {
FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; if (![db open]) {
NSLog(@"OPEN FAIL");
return;
} [db beginTransaction];
[db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"HP",@""];
[db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"MP",@""];
[db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"攻击",@""];
[db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"防御",@""];
[db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"攻速",@"0.3"];
[db executeUpdate:@"INSERT INTO profile(name,val) VALUES (?,?)",@"移速",@""];
[db commit];
[db close]; } - (IBAction)readProfile:(id)sender{
FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; if (![db open]) {
NSLog(@"OPEN FAIL");
return;
}
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
FMResultSet *rs = [db executeQuery:@"SELECT name,val FROM profile"];
while ([rs next]) {
[dictionary setObject:[rs stringForColumn:@"val"] forKey:[rs stringForColumn:@"name"]];
}
[rs close];
[db close]; [self show:dictionary];
} -(void)show:(NSMutableDictionary *)dictionary { self.label.numberOfLines = ; NSString * text = [[NSString alloc] init];
for(NSString *key in dictionary) {
text = [NSString stringWithFormat:@"%@%@:%@\n",text,key,[dictionary objectForKey:key]];
}
self.label.text = text;
} @end

案例结束

NSMutableDictionary Class Reference (key->value可增长数组)

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/

IOS开发-本地持久化存储sqlite应用的更多相关文章

  1. iOS 关于本地持久化存储的探讨

    目前,用以本地化存储的方式有很多,常用的有以下: 1.临时缓存 先说说临时缓存,临时缓存一般相当于用来管理应用程序中全局需要常用的一些内容.比如当前用户的ID或者当前的定位信息等. 常用的方式就是写一 ...

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

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

  3. Windows 8 应用开发 - 本地数据存储

    原文:Windows 8 应用开发 - 本地数据存储      在应用中通常会遇到用户主动或被动存储信息的情况,当应用关闭后这些数据仍然会存储在本地设备上,用户下次重新激活应用时会自动加载这些数据.下 ...

  4. iOS开发——数据持久化&使用NSUserDefaults来进行本地数据存储

    使用NSUserDefaults来进行本地数据存储   NSUserDefaults适合存储轻量级的本地客户端数据,比如记住密码功能,要保存一个系统的用户名.密码.使用NSUserDefaults是首 ...

  5. IOS开发--数据持久化篇之文件存储(一)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  6. iOS开发——数据持久化Swift篇&使用Core Data进行数据持久化存储

    使用Core Data进行数据持久化存储   一,Core Data介绍 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成 ...

  7. IOS开发--数据持久化篇文件存储(二)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  8. iOS数据本地持久化

      p1:归档.Preference(NSUserDefault).沙盒存储 iOS开发中本地存储主要有三种形式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedAr ...

  9. Unity本地数据存储---Sqlite和JSON

    2014-05-04更新 SqliteDatabase.cs这个文件的初始方法有问题,具体是如果指定URL已经存在了DB文件,就不会重新覆盖DB文件. 这导致我们修改之后的DB文件无法产生效果. 本人 ...

随机推荐

  1. ADT-bundle(Android Development Tools)环境配置

    Android开发环境有两套比较主流的:ADT-bundle和Android Studio,前者是Eclipse插件的形式进行开发,后者是Android的官方IDE. ADT环境的配置与调试:(1)安 ...

  2. js实现无刷新表单提交文件,将ajax请求转换为form请求方法

    最近在做项目的时候遇到一个需要上传文件的需求,因为ajax请求是无法上传二进制文件流的,所以只能用form表单提交,而form提交有一个问题就是会使页面刷新,本文解决了form表单提交文件时页面刷新的 ...

  3. 浅谈DOM性能考虑

    浅谈DOM性能考虑 很多人都会忽视脚本对Web应用整体性能的影响.为保证应用的流畅运行,在为文档编写和应用脚本时,需要注意一些问题.一.尽量减少访问DOM和尽量减少标记    访问DOM的方式对脚本性 ...

  4. CentOS6.5菜鸟之旅:安装ATI显卡驱动

    一.前言 自从安装了CentOS,我的显卡就没消停过,一直在彪高温而且噪音特别大,于是决定上网搜索解决办法.下面记录下来以供日后查阅. 二.安装fglrx driver(ATI/AMD 显卡的linu ...

  5. 【Spark】---- Spark 硬件配置

    存储系统 Spark任务需要从一些外部的存储系统加载数据(如:HDFS 或者 HBase),重要的是存储系统要接近Spark系统,我们有如下推荐:   (1)如果可能,运行Spark在相同的HDFS节 ...

  6. Spring应用——对 JDBC 的支持

    一.说明 1.Spring JDBC 对原始的 JDBC 进行了封装,使其更加易用. 2.JdbcTemplate 作为 Spring JDBC 的核心,为不同类型的 JDBC 操作提供了模板方法. ...

  7. ok6410 android driver(3)

    This article discusses the Makefile and how to port the module to different platform (localhost and ...

  8. 基于KV Data Model实现Table Data Model

    HBase对外暴露出来的是一个表格数据模型,如下图所示 rowkey应用程序可以自己设计.每一个Cell可以保存多个版本的数据,由timestamp标示版本.应用程序可以自己指定timestamp,如 ...

  9. Equeue初识

    详细解说: http://www.cnblogs.com/netfocus/p/3595410.html 简单代码用法: Producer 端代码用法实例 和 Customer 端代码用法示例: ht ...

  10. jquery ajax跨域访问webservice配置

    1.webservice方法 [System.Web.Script.Services.ScriptService] public class TestService : System.Web.Serv ...