ios数据存储方式FMDB
从网上下载FMDB的原码,将其拖入到项目中,然后在Link Binary With Libraries中添加libsqlite3.dylib,就可以用了
实现如下:
- #import "ViewController.h"
- #import "FMDatabase.h"
- #import "FMDatabaseAdditions.h"
- #import "FMDatabaseQueue.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.
- }
- - (void)dealloc {
- [_nameText release];
- [_ageText release];
- [_sexText release];
- [_showLabel release];
- [super dealloc];
- }
- - (void)viewDidUnload {
- [self setNameText:nil];
- [self setAgeText:nil];
- [self setSexText:nil];
- [self setShowLabel:nil];
- [super viewDidUnload];
- }
- //保存
- - (IBAction)saveBtn:(id)sender {
- FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
- if (![database open]) {
- NSLog(@"Open database failed");
- return;
- }
- if (![database tableExists:@"user"]) {
- [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];
- }
- BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];
- //下面注释的也能实现数据的插入,只不过它是传入了字典
- // NSMutableDictionary* argsDict=[NSMutableDictionary dictionary];
- // [argsDict setObject:_nameText.text forKey:@"name"];
- // [argsDict setObject:_ageText.text forKey:@"age"];
- // [argsDict setObject:_sexText.text forKey:@"sex"];
- // BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (:name,:age,:sex)" withParameterDictionary:argsDict];
- if (insert) {
- UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
- [alert show];
- [alert release];
- }else{
- NSLog(@"insert failed");
- }
- [database close];
- //下面注释的这一段也是创建表只不过它是多线程安全的,而上面的在多线程中是不安全的
- // FMDatabaseQueue* queue=[FMDatabaseQueue databaseQueueWithPath:[self databasePath]];
- // [queue inDatabase:^(FMDatabase* database){
- // if (![database tableExists:@"user"]) {
- // [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];
- // }
- // BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];
- // if (insert) {
- // UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
- // [alert show];
- // [alert release];
- // }else{
- // NSLog(@"insert failed");
- // }
- //
- // }];
- // [queue close];
- }
- //显示所有数据库中的数据
- - (IBAction)showBtn:(id)sender {
- FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
- if (![database open]) {
- return;
- }
- //注意 此处的FMResultSet可以不用关闭,因为数据库关闭的时候FMResultSet自动关闭
- FMResultSet* resultSet=[database executeQuery:@"select* from user"];
- NSString* str=@"";
- while ([resultSet next]) {
- NSString* name=[resultSet stringForColumn:@"name"];
- NSInteger age=[resultSet intForColumn:@"age"];
- NSString* sex=[resultSet stringForColumn:@"sex"];
- str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];
- NSLog(@"Name:%@,Age:%d,Sex:%@\n",name,age,sex);
- }
- _showLabel.text=str;
- [database close];
- }
- //查询
- - (IBAction)checkBtn:(id)sender {
- FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
- if (![database open]) {
- return;
- }
- FMResultSet* resultSet=[database executeQuery:@"select* from user where name = ?",@"chen"];
- NSString* str=@"";
- while ([resultSet next]) {
- NSString* name=[resultSet stringForColumn:@"name"];
- NSInteger age=[resultSet intForColumn:@"age"];
- NSString* sex=[resultSet stringForColumn:@"sex"];
- str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];
- }
- _showLabel.text=str;
- [database close];
- }
- //删除
- - (IBAction)deleteBtn:(id)sender {
- FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
- if (![database open]) {
- return;
- }
- BOOL delete=[database executeUpdate:@"delete from user where name = ?",@"chen"];
- if (delete) {
- UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"删除成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
- [alert show];
- [alert release];
- }
- [database close];
- }
- //更新
- - (IBAction)updateBtn:(id)sender {
- FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
- if (![database open]) {
- return;
- }
- BOOL update=[database executeUpdate:@"update user set age = ? where name= ?",[NSNumber numberWithInt:20],@"chen"];
- if (update) {
- UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"更新成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
- [alert show];
- [alert release];
- }
- [database close];
- }
- -(NSString* )databasePath
- {
- NSString* path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
- NSString* dbPath=[path stringByAppendingPathComponent:@"user.db"];
- return dbPath;
- }
- @end
ios数据存储方式FMDB的更多相关文章
- iOS - 数据存储方式(本地化)
iOS中数据存储方式 一般使用以下4种:(已更新) .NSKeyedAchiever//序列化 存放对象 .NSUserDefaults//本质是plist存储 NSData.NSString.NSN ...
- IOS 数据存储之 FMDB 详解
FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过 ...
- IOS数据存储之FMDB数据库
前言: 最近几天一直在折腾数据库存储,之前文章(http://www.cnblogs.com/whoislcj/p/5485959.html)介绍了Sqlite 数据库,SQLite是一种小型的轻量级 ...
- ios中常见数据存储方式以及SQLite常用的语句
在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults 将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...
- IOS开发数据存储篇—IOS中的几种数据存储方式
IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09 421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...
- iOS 应用数据存储方式(XML属性列表-plist)
iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...
- iOS开发UI篇—ios应用数据存储方式(偏好设置)
iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...
- iOS开发UI篇—ios应用数据存储方式(归档)
iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...
随机推荐
- hadoop提交作业自定义排序和分组
现有数据如下: 3 3 3 2 3 1 2 2 2 1 1 1 要求为: 先按第一列从小到大排序,如果第一列相同,按第二列从小到大排序 如果是hadoop默认的排序方式,只能比较key,也就是第一列, ...
- RocketMQ之连接以及连接缓存
发现rabbitmq有一个ConnectionFactory.发现rocketmq好像没这个东西.按道理来说如果每次发送消息都新建一条连接肯定是不可能的. ps:其实之所以是有上面的疑问是因为数据库连 ...
- ssh2学习-applicationContext.xml文件配置-----<context:annotation-config/>详解
当我们需要使用BeanPostProcessor时,直接在Spring配置文件中定义这些Bean显得比较笨拙,例如: 使用@Autowired注解,必须事先在Spring容器中声明AutowiredA ...
- 火车票订票API 用PHP完成火车票订票流程
本教程用来演示聚合数据-火车票订票接口的使用流程. 配置好PHP环境,PHP版本最好大于5.5 去聚合数据-火车票订票接口申请key:http://www.juhe.cn/docs/api/id/17 ...
- 神奇的canvas——点与线绘制的绚丽动画效果
代码地址如下:http://www.demodashi.com/demo/11636.html 前言 之前在某网站上看到了一个canvas绘制的动画效果,虽然组成的元素很简单,只有点和线,但是视觉效果 ...
- ubuntu 12.04LTS下jdk 6安装记录
这两天突然对ubuntu产生了兴趣,决定来折腾一下,:-) 由于开发一般都是在java上进行,所以第一步就是得把环境搭建好,折腾了一会儿,现在把过程记录一下. Step 1 下载jdk6 地址是 ht ...
- Mysql数据库分库备份,分表备份
分库备份 #!/bin/sh DBPATH=/server/backup MYUSER=root MYPASS=oldboy123 SOCKET=/data/3306/mysql.sock MYCMD ...
- 谈谈 OC 中的内联函数
内联函数 即在编译的时候将函数体替换函数调用.从而不须要将parameter,returnaddress进行push/pop stack的操作, 从而加速app的执行.然而,会添加二进制文件的大小. ...
- Boolean 转 string
boolean b=false; String b= String.valueOf(b);
- jQuery EasyUI DataGrid在MVC中的运用-基本属性并实现分页
※ datagrid的基本属性和方法 ※ datagrid分页在前后台的实现 最终效果: 与视图显示对应的view model public class Book public strin ...