本文转载至 http://blog.csdn.net/chen505358119/article/details/9289489

分类: ios2013-07-10 14:05 2471人阅读 评论(0) 收藏 举报

从网上下载FMDB的原码,将其拖入到项目中,然后在Link Binary With Libraries中添加libsqlite3.dylib,就可以用了

实现如下:

  1. #import "ViewController.h"
  2. #import "FMDatabase.h"
  3. #import "FMDatabaseAdditions.h"
  4. #import "FMDatabaseQueue.h"
  5. @interface ViewController ()
  6. @end
  7. @implementation ViewController
  8. - (void)viewDidLoad
  9. {
  10. [super viewDidLoad];
  11. // Do any additional setup after loading the view, typically from a nib.
  12. }
  13. - (void)didReceiveMemoryWarning
  14. {
  15. [super didReceiveMemoryWarning];
  16. // Dispose of any resources that can be recreated.
  17. }
  18. - (void)dealloc {
  19. [_nameText release];
  20. [_ageText release];
  21. [_sexText release];
  22. [_showLabel release];
  23. [super dealloc];
  24. }
  25. - (void)viewDidUnload {
  26. [self setNameText:nil];
  27. [self setAgeText:nil];
  28. [self setSexText:nil];
  29. [self setShowLabel:nil];
  30. [super viewDidUnload];
  31. }
  32. //保存
  33. - (IBAction)saveBtn:(id)sender {
  34. FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
  35. if (![database open]) {
  36. NSLog(@"Open database failed");
  37. return;
  38. }
  39. if (![database tableExists:@"user"]) {
  40. [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];
  41. }
  42. BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];
  43. //下面注释的也能实现数据的插入,只不过它是传入了字典
  44. //    NSMutableDictionary* argsDict=[NSMutableDictionary dictionary];
  45. //    [argsDict setObject:_nameText.text forKey:@"name"];
  46. //    [argsDict setObject:_ageText.text forKey:@"age"];
  47. //    [argsDict setObject:_sexText.text forKey:@"sex"];
  48. //    BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (:name,:age,:sex)" withParameterDictionary:argsDict];
  49. if (insert) {
  50. UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
  51. [alert show];
  52. [alert release];
  53. }else{
  54. NSLog(@"insert failed");
  55. }
  56. [database close];
  57. //下面注释的这一段也是创建表只不过它是多线程安全的,而上面的在多线程中是不安全的
  58. //    FMDatabaseQueue* queue=[FMDatabaseQueue databaseQueueWithPath:[self databasePath]];
  59. //    [queue inDatabase:^(FMDatabase* database){
  60. //        if (![database tableExists:@"user"]) {
  61. //            [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];
  62. //        }
  63. //        BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];
  64. //        if (insert) {
  65. //            UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
  66. //            [alert show];
  67. //            [alert release];
  68. //        }else{
  69. //            NSLog(@"insert failed");
  70. //        }
  71. //
  72. //    }];
  73. //    [queue close];
  74. }
  75. //显示所有数据库中的数据
  76. - (IBAction)showBtn:(id)sender {
  77. FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
  78. if (![database open]) {
  79. return;
  80. }
  81. //注意 此处的FMResultSet可以不用关闭,因为数据库关闭的时候FMResultSet自动关闭
  82. FMResultSet* resultSet=[database executeQuery:@"select* from user"];
  83. NSString* str=@"";
  84. while ([resultSet next]) {
  85. NSString* name=[resultSet stringForColumn:@"name"];
  86. NSInteger age=[resultSet intForColumn:@"age"];
  87. NSString* sex=[resultSet stringForColumn:@"sex"];
  88. str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];
  89. NSLog(@"Name:%@,Age:%d,Sex:%@\n",name,age,sex);
  90. }
  91. _showLabel.text=str;
  92. [database close];
  93. }
  94. //查询
  95. - (IBAction)checkBtn:(id)sender {
  96. FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
  97. if (![database open]) {
  98. return;
  99. }
  100. FMResultSet* resultSet=[database executeQuery:@"select* from user where name = ?",@"chen"];
  101. NSString* str=@"";
  102. while ([resultSet next]) {
  103. NSString* name=[resultSet stringForColumn:@"name"];
  104. NSInteger age=[resultSet intForColumn:@"age"];
  105. NSString* sex=[resultSet stringForColumn:@"sex"];
  106. str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];
  107. }
  108. _showLabel.text=str;
  109. [database close];
  110. }
  111. //删除
  112. - (IBAction)deleteBtn:(id)sender {
  113. FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
  114. if (![database open]) {
  115. return;
  116. }
  117. BOOL delete=[database executeUpdate:@"delete from user where name = ?",@"chen"];
  118. if (delete) {
  119. UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"删除成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
  120. [alert show];
  121. [alert release];
  122. }
  123. [database close];
  124. }
  125. //更新
  126. - (IBAction)updateBtn:(id)sender {
  127. FMDatabase* database=[FMDatabase databaseWithPath:[self databasePath]];
  128. if (![database open]) {
  129. return;
  130. }
  131. BOOL update=[database executeUpdate:@"update user set age = ? where name= ?",[NSNumber numberWithInt:20],@"chen"];
  132. if (update) {
  133. UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"更新成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];
  134. [alert show];
  135. [alert release];
  136. }
  137. [database close];
  138. }
  139. -(NSString* )databasePath
  140. {
  141. NSString* path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
  142. NSString* dbPath=[path stringByAppendingPathComponent:@"user.db"];
  143. return dbPath;
  144. }
  145. @end

ios数据存储方式FMDB的更多相关文章

  1. iOS - 数据存储方式(本地化)

    iOS中数据存储方式 一般使用以下4种:(已更新) .NSKeyedAchiever//序列化 存放对象 .NSUserDefaults//本质是plist存储 NSData.NSString.NSN ...

  2. IOS 数据存储之 FMDB 详解

    FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过 ...

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

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

  4. ios中常见数据存储方式以及SQLite常用的语句

    在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults  将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...

  5. IOS开发数据存储篇—IOS中的几种数据存储方式

    IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09  421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...

  6. iOS 应用数据存储方式(XML属性列表-plist)

    iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...

  7. iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)

    iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...

  8. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  9. iOS开发UI篇—ios应用数据存储方式(归档)

    iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...

随机推荐

  1. 小心!Ubuntu14.04 升级到16.04 的几个坑

    收录待用,修改转载已取得腾讯云授权 昨天趁着周末把服务器升级了一把,遇到的坑可不少: sudo apt update sudo apt dist-upgrade 坑1:升级失败后,改用下面命令: su ...

  2. Solr-5.3.1 dataimport 导入mysql数据

    最近需要计算制造业领域大词表每个词的idf,词表里一共九十多万个词,语料一共三百七十多万篇分词后文献.最开始尝试用程序词表循环套语料循环得到每个词的idf,后来又尝试把语料存入mysql然后建立全文索 ...

  3. HDU2491 Priest John's Busiest Day

    题目链接 题意: 有n个人要进行乒乓球比赛,每一个人都一个能力值.每一个人出现的次序就是他们住的位置 如今要求进行一场比赛,三个人,裁判的能力值在两个选手之间,住的位置也在两个人的之间 问这样的比赛一 ...

  4. Unity 导出切片精灵

    http://blog.csdn.net/akof1314/article/details/38845933 设有一张png/tga图集,导入到Unity,放置目录"Assets/Resou ...

  5. bye 2013 hello 2014

    最近两个月除了必要的工作外,其余时间都在干一些我其实平时很少干的事, 喝酒.唱歌.打麻将.玩牌.以及到处跑找朋友玩,也许是过年的原因我放纵了自己,也许是自己心中的烦恼.我的博客记录着我每次看书学习的笔 ...

  6. node-webkit 开发环境搭建

    node-webkit支持的操作系统类型: Linunx:32bit / 64bit Windows: win32 Mac:32bit,10.7+ 开发环境 1,根据自己的操作系统下载响应的nw二进制 ...

  7. the filename directory name or volume label syntax is incorrect

    使用virtual PC 时出现的一些问题 1.问题点:在安装virtual PC的时候,需要先安装WindowsXPMode_en-us.exe 我下载的英文版,路径默认在C:\360安全浏览器下载 ...

  8. 88. Merge Sorted Array【easy】

    88. Merge Sorted Array[easy] Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 ...

  9. codeblocks中右键源文件没有Rename选项?

    那是因为你右击的那个文件已经被CB的编辑器打开,关闭即可,你就能看到Rename选项了. 或者更简单,翻到Files那一栏,然后右击某个文件夹选择"Make root"即可,就跟w ...

  10. centos7系统备份与还原

    1. 前言 在使用Ubuntu之前,相信很多人都有过使用Windows系统的经历.如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工具(通常都是私有软件),然后重启电脑进入备份 ...