FMDB(FMDatabase)--SQLite的封装
为什么80%的码农都做不了架构师?>>>
http://note.sdo.com/u/3413430/NoteContent/d1mS~k158MiwE0c400eTi
SQLite的C API對初學者來說實在太麻煩太瑣碎,難度太高。FMDB ( FMDatabase ) 說穿了其實只是把C API包裝成簡單易用的Objective-C类。對于SQLite初學者來說,大大減低了上手的難度。有了FMDB,寫程式時只要專心在SQLite的語法上,而不用去理那堆有看沒有懂的C API,實在是件快樂的事情。
使用资料库的第一件事,就是建立一个资料库。要注意的是, 在iOS环境下,只有document directory 是可以进行读写的。在写程式时用的那个Resource资料夹底下的东西都是read-only。因此,建立的资料库要放在document 资料夹下。方法如下:
1 | NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); |
2 | NSString *documentDirectory = [paths objectAtIndex:0]; |
3 | NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"MyDatabase.db"]; |
4 | FMDatabase *db = [FMDatabase databaseWithPath:dbPath] ; |
5 | if (![db open]) { |
6 | NSLog(@“Could not open db.”); |
7 | return ; |
8 | } |
建立table
1 | [db executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer, Sex integer, Phone text, Address text, Photo blob)"]; |
1 | [db executeUpdate:@"INSERT INTO PersonList (Name, Age, Sex, Phone, Address, Photo) VALUES (?,?,?,?,?,?)", |
2 |
3 | @"Jone", [NSNumber numberWithInt:20], [NSNumber numberWithInt:0], @“091234567”, @“Taiwan, R.O.C”, [NSData dataWithContentsOfFile: filepath]]; |
1 | [db executeUpdate:@"UPDATE PersonList SET Age = ? WHERE Name = ?",[NSNumber numberWithInt:30],@“John”]; |
01 | FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, FROM PersonList"]; |
02 |
03 | while ([rs next]) { |
04 |
05 | NSString *name = [rs stringForColumn:@"Name"]; |
06 |
07 | int age = [rs intForColumn:@"Age"]; |
08 |
09 | } |
10 |
11 | [rs close]; |
1 | //找地址 |
2 |
3 | NSString *address = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"John”]; |
4 |
5 | //找年齡 |
6 |
7 |
int age = [db intForQuery:@"SELECT Age FROM PersonList WHERE Name = ?",@"John”]; 1、首先得实例化一个FMDatabase对象,这跟Sqlitepersistentobjects 派生一个子类进行操作是不同。接着打开一个数据库(如果没有会创建一个数据库) //paths: ios下Document路径,Document为中ios可读写的文件夹 //创建数据库实例 db 这里说明下:如果路径中不存在”Test.db”的文件,sqlite会自动创建”Test.db”
接下来,我们可以通过这个数据库对象进行操作了。操作主要是update和queries。 首先是创建表。 //创建一个名为User的表,有两个字段分别为string类型的Name,integer类型的 Age
这样我们就有了一张表了。接下我们对表进行操作。插入数据!注意插入的数据使用了通配符,这跟iphone直接使用sqlite借口的绑定变量是一样的,后面的通配符匹配的数据。 //插入数据使用OC中的类型 text对应为NSString integer对应为NSNumber的整形
接下来是更新数据。
再接下来,就是删除数据啦。
update的基本操作就这几个,接下来是queries!
这样我们就查询返回了一条数据,那当我们想要查询放返回多条数据怎么办呢?不用愁,之前我就提到了FMDB中的另外一个主要的类,FMResultSet,这是一个结果集!返回多条数据时FMDB会将数据放在这个结果集中,然后我们在对这个结果集进行查询操作!很简单。
更多的FMResultSet方法有: intForColumn: longForColumn: longLongIntForColumn: boolForColumn: doubleForColumn: stringForColumn: dateForColumn: dataForColumn: dataNoCopyForColumn: UTF8StringForColumnIndex: objectForColumn: 具体查看一下类就行了!好了,对于FMDB的使用就这样,是不是很简单呢,其实这个些封装sqlite的框架都是万变不离其宗的,只要你掌握了sql就行了! |
转载于:https://my.oschina.net/amoyai/blog/90488
FMDB(FMDatabase)--SQLite的封装相关推荐
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- FMDB使用SQLite事务Save Point
FMDB使用SQLite事务Save Point 在SQLite中,事务提供了批量处理,批量撤销的功能.当批量操作中有一步无法完成操作,就会把执行过的语句都撤销,恢复到撤销前的状态.但是由于SQLit ...
- fmdb(FMDatabase) 数据库总结
这段时间公司在做一个新的应用,用到了数据库.在网上找了一些资料,最后决定用fmdb来做.主要是用起来比较简单,适合刚接触数据库这方面的人. 一.步 首先是创建数据库: +(NSString*)fil ...
- FMDB與SQLite 數據庫應用示範:打做一隻簡單的電影資料庫 App
原文:http://www.appcoda.com/fmdb-sqlite-database/ 作者:GABRIEL THEODOROPOULOS 譯者:kmyhy 通常在 App 中使用數據庫并處理 ...
- 安卓获取mysql数据封装方法_android SQLite数据库封装
终于有时间好好看看数据库了 今天下午自己封装了一个SQLite数据库 留着以后自己用吧 虽然还有许多要修改的地方 贴出代码先 package com.example.testdatabase; imp ...
- android 本地数据库sqlite的封装
单机android sqlite数据库的实现,这个数据库可与程序一起生成在安装包中 一.下载sqlite3.exe文件 二.运行 cmd 转到sqlite3.exe 所在目录 运行 sqlite ...
- HTML5plus SQLite 方法封装 demo
SQLite模块用于操作本地数据库文件,可实现数据库文件的创建,执行SQL语句等功能. <!DOCTYPE html> <html> <head><meta ...
- GitHub Top 100 Objective-C 项目简介
主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 若有任何疑问可通过微博@李锦发联系我 GitHub 地 ...
- GitHub上排名前100的iOS开源库介绍(来自github)
主要对当前 GitHub 排名前 100 的项目做一个简单的简介,方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 项目名称 项目信息 1. AFNetworking 作者 ...
最新文章
- linux文件自动删除,自动删除文件脚本(Linux shell脚本)
- php怎么写获取手机剪切板到搜索栏,如何根据指定的剪切板获取html?
- RPC框架原理及从零实现系列博客(二):11个类实现简单RPC框架
- 【NSGAII】基于NSGAII的多目标优化算法的MATLAB仿真
- webapi 找到了与请求匹配的多个操作(ajax报500,4的错误)
- 北漂、杭漂,居大不易,他们是怎么买第一套房子的
- mysql time 5分钟_MySQL 使用 PV 和 PVC 每天5分钟玩转 Docker 容器技术(154)
- matlab中rgb转hsv,matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转
- 数百万人都在使用的9款无线路由器易受226个缺陷影响
- 关键业务开放平台助金融行业数字化转型
- mysql sqlyog 备份计划_SqlYog 自动备份数据库
- MQTT Java 客户端
- 百度“有啊”困局之源:流量到交易的转化
- i711800h核显相当于什么显卡 i7 11800h相当于台式什么CPU
- 论文会议推荐到计算机研究与发展,计算机研究与发展类论文参考文献 计算机研究与发展核心期刊参考文献有哪些...
- python参数内存地址
- 惊了!这才是真正的 Windows 摸鱼神器!!!
- 逃离迷宫的路径(打印路径)
- icloud备份qq数据怎么恢复
- PWA:安装 Web 应用
热门文章
- jmeter html 乱码,JMeter3.0图形化HTML报告中文乱码问题处理
- linux mysql降权_怎样将mysql数据库root降权
- c 判断文件是否存在_C++基础:判断文件是否存在的方法
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...
- 最近点对模板__hdu1007
- windows vbs显示桌面命令
- Docker容器管理
- linux中sleep详解实例
- Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
- [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)