第三方数据库FMDB

•FMDB的使用:在sqlite的基础上,将sqlite中的函数进行封装产生的一个数据库文件。
–FMDB的好处是对基本C库的封装,方便使用。同时还提供了多线程操作数据库带来的读脏数据等问题的方法。
–FMDB有三个主要的类

FMDatabase:对象就代表一个单独的SQLite数据库用来执行SQL语句

FMResultSet:使用FMDatabase执行查询后的结果集

FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的
 
 
对数据库所有的操作只需下面的方法即可:
查询语句:- (FMResultSet *)executeQuery:(NSString*)sql, ...    

- (BOOL)next;

                    -{type}ForColumnIndex:(int)columnIdx

创建、插入、修改等等语句:- (BOOL)executeUpdate:(NSString*)sql, ...
 

执行SQL语句:

<1>使用:(需要FMDatabase *db成员变量)
     创建或打开:FMDataBase类

self.db = [FMDatabase databaseWithPath:fileName];  //创建数据库

[self.db open];//打开数据库

[self.db close]; //关闭数据库

//对数据库进行插入、修改的操作

[self.db executeUpdate:@“CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name TEXT,age INTEGER)”];

[self.db executeUpdate:@"INSERT INTO t_student(name , age) VALUES(?, ?);", @"xuneng", @(10)];

[self.db executeUptate:@"update t_student set name = 'lisi' where age = @(10)"];

<2>查询:FMResultSet类(数据取出完全后,不需要再去关闭结果集,当新的结果集产生,或者其数据库关闭时,会自动关闭。)

// 1.查询

FMResultSet *set = [self.db  executeQuery:@"SELECT * FROM t_student;"];  //返回结果集

// 2.取出数据

while ([set next])

{

   // 取出姓名

NSString *name = [set stringForColumnIndex:1];

  // 取出年龄   

int age = [set intForColumnIndex:2];

NSString *name = [set stringForColumn:@"name"];

int age = [set intForColumn:@"age"];

NSLog(@"name = %@, age = %d", name, age);

}

创建数据库并进行增删改查的操作举例如下:

1、首先导入sqlite本地数据库和第三方数据库FMDB

2、在UIViewController类中对数据库表进行增删该查操作如下:

《1》数据库路径

NSArray *dics = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *dbPath = [[dics lastObject] stringByAppendingPathComponent:@"user.db"];

《2》 创建数据库

self.db = [FMDatabase databaseWithPath:dbPath];

《3》打开数据库

if(![self.db open])

{

return; //打开数据库失败

}

《4》创建数据库表

if(![self.db executeUpdate:@"create table if not exists user (ID integer primary key autoincrement,name text,password text)"])

{

return; //创建数据库表失败

}

《5》插入数据

if(![self.db executeUpdate:@"insert into user (name,password) values('admin','123456')"])

{

return; //插入数据失败

}

《6》修改数据

if(![self.db executeUpdate:@"update user set name = 'zhangsan' where ID = 2"])

{

return; //修改数据失败

}

  

《7》获取结果集

FMResultSet *resultSet = [self.db executeQuery:@"select * from user"];

《8》遍历结果集,取出数据

while ([resultSet next])

{

int ID = [resultSet intForColumnIndex:0];

NSString *name = [resultSet stringForColumnIndex:1];

NSString *password = [resultSet stringForColumnIndex:2];

NSLog(@"ID:%d,name:%@,password:%@",ID,name,password);

}

《8》//关闭数据库

[self.db close];

演示结果如下:

-- ::38.640 第三方数据库FMDB[:] ID:,name:admin,password:
-- ::38.641 第三方数据库FMDB[:] ID:,name:zhangsan,password:
-- ::38.641 第三方数据库FMDB[:] ID:,name:admin,password:
-- ::38.641 第三方数据库FMDB[:] ID:,name:admin,password:
-- ::38.641 第三方数据库FMDB[:] ID:,name:admin,password:

iOS:第三方数据库文件FMDB的使用的更多相关文章

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

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

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

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

  3. IOS第三方数据库--FMDB

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  4. IOS第三方数据库--FMDB 分类: ios技术 2015-03-01 09:38 57人阅读 评论(0) 收藏

    iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepers ...

  5. iOS 把数据库文件打包到mainbundle中,查找不到路径的解决的方法;以及在删除bundle中文件的可行性

    在开发中有时我们须要把数据库文件打包到我们的项目中.一般我们都是在外部用工具生成数据库文件,然后拉入项目中.可是我们在程序中查找改文件时.返回的路径总是nil 解决的方法: 原因我们拉入其它资源文件( ...

  6. iOS开发数据库-FMDB

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

  7. QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData

    SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...

  8. IOS学习笔记28—SQLite3第三方库之FMDB

    本文转载至 http://blog.csdn.net/happyrabbit456/article/details/11609451 SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非 ...

  9. IOS数据存储之FMDB数据库

    前言: 最近几天一直在折腾数据库存储,之前文章(http://www.cnblogs.com/whoislcj/p/5485959.html)介绍了Sqlite 数据库,SQLite是一种小型的轻量级 ...

随机推荐

  1. linux用户帐号管理/etcpasswd 和/etc/shadow文件

    #学习鸟哥的linux私房菜 /etc/passwd的文件构造: dahu@dahu-OptiPlex-:~/myfile/VideoFile$ head /etc/passwd root:x:::r ...

  2. 搭建简单的CGI应用程序

    原文来源于<核心编程3>第10章web编程 一.静态文件+脚本文件 1.首先开启cgiweb服务器 python2 -m CGIHTTPServer 8000 看到如下反应 2.服务器目录 ...

  3. [实战]MVC5+EF6+MySql企业网盘实战(13)——编辑文件夹

    写在前面 上篇文章实现了,新建文件夹以及与之前的上传文件的逻辑做了集成,本篇文章将实现编辑文件夹名称,其实这个也有难点,就是编辑文件夹名称时,要考虑文件夹中存在文件或者子文件夹的情况,因为他们的路径已 ...

  4. Python加密模块-pycryptodome

    这个模块可以避开Pycrypto安装时带来的一系列包依赖问题. 安装命令: pip install pycryptodome 使用实例: from Crypto.Cipher import AES k ...

  5. 【BZOJ 3534】 3534: [Sdoi2014]重建 (Matrix-Tree Theorem)

    3534: [Sdoi2014]重建 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 709  Solved: 32 ...

  6. [POI2005]A Journey to Mars --- 单调队列

    [POI2005]A Journey to Mars 题目描述: Byteazar 决定去火星参加一个空间站旅行. 火星的所有空间站都位于一个圆上. Byteazar 在其中一个登陆然后变开始饶圈旅行 ...

  7. 【20181024T2】小C的序列【GCD性质+链表】

    题面 [错解] 一眼不可做啊 哎分治? 算不了啊 真的是,打暴力走人 20pts (事实上,还有20pts是随机数据,加个小小的特判就可以) [正解] 首先,从l开始往后gcd最多只有O(log)种取 ...

  8. 【最小表示法】BZOJ2176-Strange string(unsigned char!!!)

    [题目大意] 给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的SS的字串中最小的(字符串的比较), 则称T为”奇怪的字串”. 你的 ...

  9. ZOJ 3213 Beautiful Meadow 简单路径 插头DP

    简单路径的题目,其实就是在状态后面多记了有多少个独立插头. 分类讨论独立插头: 1.只存在上插头或者左插头,可以选择作为独立插头. 2.都不存在上插头和左插头,选择作为独立插头的同时要标号为新的连通块 ...

  10. 2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索

    邱老师降临小行星 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Des ...