iOS开发  数据库FMDB

1.简介

需求作用:  如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目

常用的数据库:

  (1)Microsoft SQL Server 2000/2008, 中小企业使用较多

  (2)Oracle 比较复杂, 大企业使用较多

  (3)Mysql数据库, 网站使用较多

  (4)sqlite:  本地数据库, 访问数据足够快, 直接访问文件

         足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了

          足够小, 系统不超过1M, 适合在移动端上使用

2. MesaSQlite使用

实例:  使用数据存储存储一个班上学生的信息

      学号sid  用户名username  密码password 成绩score

      1501    zhangsan      123      100

      1502    lilei         321      90

      1503    wangwu        222      80 

(1)创建数据库

(2)创建数据表

(3)设计数据表(添加多个字段/列)

(4)数据库常用操作

  增,删,改,查

3. SQL结构化查询语句

SQL, Structure Query Language, 结构化查询语言, 作用就是操作数据库(创建表, 数据增删改查)

(1)创建数据表

create table if not exists StudentInfo(sid integer,
username varchar(20),
password varchar(20),
score varchar(20))

(2)插入数据

insert into StudentInfo(sid,username,password,score) values(1501,'zhangsan','','')

(3)查询数据

<1>查询表格中所有数据

select * from StudentInfo;

<2>查询指定的字段

实例:  查询所有名字username

select username from StudentInfo

<3>根据指定的条件进行查询

实例: 查找name为zhansan的所有信息

select * from StudentInfo where username='zhangsan'

<4>根据多个条件进行查询

实例: 查找username为zhansan, 并且password为123的所有信息

select * from StudentInfo where username='zhangsan' and password=''

<5>查询后需要排序

a.根据score升序排列

select * from StudentInfo order by score

b.根据score降序
排序

select * from StudentInfo order by score desc

<6>获取数据行数

select count(*) from StudentInfo 

(4)修改数据

update StudentInfo set score=''  where username='zhangsan';

(5)删除数据

delete from StudentInfo where sid=''

4. FMDB操作数据库

配置

  导入FMDB文件,

  添加二进制库 libsqlite3.dylib,

  包含头文件#import "FMDatabase.h"

#import "ViewController.h"

#import "FMDatabase.h"

@interface ViewController (){
//创建数据库对象
FMDatabase *_database;
} @end
//1.创建数据库
-(void)createAndInitDatabase
{
//设置路径
NSString *path=[NSString stringWithFormat:@"%@/Documents/stuInfo.sqlite",NSHomeDirectory()];
//创建数据库(如果不存在则创建打开,如果存在则直接打开)
_database=[[FMDatabase alloc] initWithPath:path];
if (!_database.open) {
NSLog(@"打开失败");
return;
}
NSLog(@"打开成功");
}
//2.创建数据表
-(void)createTable
{
NSString *sql=@"create table if not exists StudentInfo(sid integer,"
"username varchar(20),"
"password varchar(20),"
"score varchar(20))";
//executeQuery用来执行select语句
//其他语句使用executeUpdate BOOL b=[_database executeUpdate:sql];
NSLog(@"----b=%d",b);
}
//3.插入数据
-(void)insertData
{
int sid=;
NSString *username=@"lisi";
NSString *password=@"";
NSString *score=@"";
NSString *sql=@"insert into StudentInfo(sid,username,password,score) values(?,?,?,?)";
//注意:?对应的每一个参数都应该是字符串,其他类型转化为字符串
BOOL b=[_database executeUpdate:sql,[NSString stringWithFormat:@"%d",sid],username,password,score ];
NSLog(@"=======b=%d",b); }
//4.查询数据
-(void)queryData
{
//显示所有人得信息
NSString *sql=@"select * from StudentInfo";
//FMResultSet 表示查询后结果集
FMResultSet *resultSet=[_database executeQuery:sql];
//next方法每次获取一条记录,获取不到的返回nil
while ([resultSet next]) {
NSLog(@"sid = %@,name =%@,pass =%@,score =%@",[resultSet stringForColumn:@"sid"],[resultSet stringForColumn:@"username"],[resultSet stringForColumn:@"password"],[resultSet stringForColumn:@"score"]);
} }
//5.修改数据
-(void)setData
{ NSString *username=@"lisi";
NSString *score=@"";
NSString *sql=@"update StudentInfo set score='60' where username='lisi';";
BOOL b=[_database executeUpdate:sql,username,score ];
NSLog(@"++++++b=%d",b); }
//6.删除数据
-(void)deleteData
{
NSString *sid=@"";
NSString *sql=@"delete from StudentInfo where sid='1501'";
BOOL b=[_database executeUpdate:sql,sid];
NSLog(@"*******b=%d",b);
}

5. 数据库在项目中使用-单例设计模式

1.首先导入FMDB文件和data.sqlite

2.添加二进制库 libsqlite3.dylib,包含头文件#import "FMDatabase.h"

3.创建一个FirstLevelModel模型,在FirstLevelModel.h里面自己定义属性,导入单例

#import <Foundation/Foundation.h>
#import "FirstLevelModel.h" @interface DatabaseManager : NSObject //获取单例对象
+(id)sharedInstance; //获取第一级目录
-(NSArray *)firstLevels;
#import "DatabaseManager.h"
#import "FMDatabase.h" @interface DatabaseManager()
{
FMDatabase *_database;
} @end @implementation DatabaseManager //获取单例对象
+(id)sharedInstance
{
static DatabaseManager *dc=nil;
if(dc==nil)
{
dc=[[[self class] alloc] init];
}
return dc;
} -(id)init
{
if (self=[super init]) {
[self openDatabase];
}
return self;
} -(void)openDatabase
{
NSString *path=[[NSBundle mainBundle] pathForResource:@"data.sqlite" ofType:nil];
_database=[[FMDatabase alloc] initWithPath:path];
if (!_database.open) {
NSLog(@"打开失败");
}
} //获取第一级目录
-(NSArray *)firstLevels
{
NSString *sql=@"select * from firstlevel";
FMResultSet *resultset=[_database executeQuery:sql];
NSMutableArray *marr=[[NSMutableArray alloc] init];
while ([resultset next]) {
FirstLevelModel *model=[[FirstLevelModel alloc] init];
model.pid=[resultset stringForColumn:@"pid"];
model.pname=[resultset stringForColumn:@"pname"];
model.pcount=[resultset stringForColumn:@"pcount"]; [marr addObject:model];
} return marr; }

自己做了一个简单“交通考试”的实例

效果图:

实现代码:点我下载

iOS开发 数据库FMDB的更多相关文章

  1. iOS开发数据库-FMDB

    前言 FMDB是以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了多线程安全的数据库操 ...

  2. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  3. iOS开发数据库篇—FMDB数据库队列

    iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...

  4. iOS开发数据库篇—SQLite简单介绍

    iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...

  5. iOS开发数据库篇—SQL

    iOS开发数据库篇—SQL 一.SQL语句 如果要在程序运行过程中操作数据库中的数据,那得先学会使用SQL语句 1.什么是SQL SQL(structured query language):结构化查 ...

  6. iOS开发数据库篇—SQL代码应用示例

    iOS开发数据库篇—SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 1.执行SQL语句在数据库中添加一条信息 插入一条数据的sql语句: 点击run执行语句之后,刷新数据 2.在 ...

  7. iOS开发数据库篇—SQLite的应用

    iOS开发数据库篇—SQLite的应用 一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二 ...

  8. IOS开发数据库篇—SQLite模糊查询

    IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...

  9. iOS开发数据库篇—SQLite常用的函数

    iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 * ...

随机推荐

  1. 关于页面刷新或者调用方法事获取不到元素信息或者出现缺少对象错误的换位思考setTimeout的使用

    这两天客户的需求不能定下来,做闲人好长时间了,不如来整理下最近碰到的一些个小麻烦. 正题: 场景一. 最近在开发的过程中使用到了百度的富客户端文本编辑器(ueditor)---这是一款功能很强大的文本 ...

  2. Masonry + Ajax 实现无限刷新瀑布流

    效果就如我的个人站yooao.cc,把我实现的思路分享给大家. Masonry渲染页面如果有图片时需要imagesLoaded辅助,不然有可能会造成布局重叠. 一个大体的思路:前端取得最后一篇文章的i ...

  3. linux 文件查找和压缩工具

    文件查找 1,which命行查找可执行文件,which 只会搜索系统$PATH目录 2,whereis,查找可执行文件,并显示出此文件的man page文件,并且可以查找到系统的库目录 3,locat ...

  4. Keil C51里关于堆栈指针的处理

    Keil C是非常优秀的C51编译器,可能是最好的C51编译器,提供各种优化模式,对变量的优化和地址安排做得非常好.这是用C语言写代码的好处之一,如果用汇编写,得费一大番功夫给各个变量安排内存物理地址 ...

  5. Ubuntu 14.04远程登录服务器--openssh的安装和配置简明步骤

    如果要主机通过网络操作嵌入式板子,ttelnet就够了,但是 如果要相互传文件,则必须使用另外一个强大的软件SSH.更完整的步骤和截图请参考http://jingyan.baidu.com/artic ...

  6. CTO这点事(技术,业务,管理,情商,周期,趋势)转

    几乎整个互联网行业都缺 CTO,特别是一些草根背景的创业者,这个问题更加显著.从我自己的感受,身边各种朋友委托我找 CTO 的需求,嗯,算下来超过两位数了,光最近一个月就有 3 个,而且这三家都是刚拿 ...

  7. 缓存一致性(Cache Coherency)入门(转)

    参考原文:http://fgiesen.wordpress.com/2014/07/07/cache-coherency/ 本文是RAD Game Tools程序员Fabian “ryg” Giese ...

  8. 【转】Ubuntu环境下SSH的安装及使用

    原文网址:http://blog.csdn.net/netwalk/article/details/12952051 SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通 ...

  9. c++ 05

    一.单例模式 二.成员指针 class Student { public:   string m_name;   void print (void) { ... } }; 1.指向成员变量的指针 成员 ...

  10. [转]ReactJS入门教程

    Refference From:http://www.cocoachina.com/webapp/20150721/12692.html 现在最热门的前端框架有AngularJS.React.Boot ...