开发者社区> boxti> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

IOS的一个数据库方法

简介:
+关注继续查看

我在IOS编程使用的FMDatabase这个sqlite框架,需要客户端与服务器做一些数据同步工作,有时得执行比较多的命令(增删改表当然是手写,但如果要手写插入几百上千条记录是很不现实的,也只需要用php从mysql中读取记录便可),而且因为客户端的缘故,mysql数据库里的一些字段并不需要写入到客户端的sqlite中,所以我们可以用PHP写一个接口页面,以JSON传递我们希望传达的数据,然后再在客户端进行处理。

  传递的数据有两种格式,一种是直接执行的命令,我把它存放在“query”数组当中,另一种是要插入的记录,把它存放在“record”当中。“query”中的的命令直接执行,而“record”里的记录以“key”=>“value”的方式,在客户端循环出SQL语句执行。

$update_array['database']['query'] = array();

$update_array['table']['wares_category']['query'] = array();
$update_array['table']['wares_category']['record'] = $all_wares_category;

//客户端的同步函数

-(void)databaseUpdate
{
   FMDatabase *db = [self getDatabase];
  
   NSURL *updateUrl = [[NSURL alloc]initWithString:[Api stringByAppendingPathComponent:@"databaseUpdate/databaseupdate"]];
   NSData *updateData = [[NSData alloc]initWithContentsOfURL:updateUrl];
  
  
   NSError *error = nil;
  
   NSDictionary *updateDictionary = [NSJSONSerialization JSONObjectWithData:updateData options:NSJSONReadingMutableContainers error:&error];
  
   int i;
   //database数组
   if([[[updateDictionary objectForKey:@"database"]objectForKey:@"query"] count] > 0){
       for (i = 0; i < [[[updateDictionary objectForKey:@"database"]objectForKey:@"query"] count]; i++){
           NSString *query = [[[updateDictionary objectForKey:@"database"]objectForKey:@"query"]objectAtIndex:i];
           [db executeUpdate:query];
       }
   }
  
   //table数组
   if([[updateDictionary objectForKey:@"table"] count] > 0){
      
       for(id tableName in [updateDictionary objectForKey:@"table"]){
          
           if([[[[updateDictionary objectForKey:@"table"] objectForKey:tableName] objectForKey:@"query"] count] > 0){
               for (i = 0; i < [[[[updateDictionary objectForKey:@"table"] objectForKey:tableName] objectForKey:@"query"] count]; i++){
                   NSString *query = [[[[updateDictionary objectForKey:@"table"] objectForKey:tableName] objectForKey:@"query"]objectAtIndex:i];
                   [db executeUpdate:query];
               }
           }
          
           if([[[[updateDictionary objectForKey:@"table"] objectForKey:tableName] objectForKey:@"record"] count] > 0){
               for (i = 0; i < [[[[updateDictionary objectForKey:@"table"] objectForKey:tableName] objectForKey:@"record"] count]; i++){
                  
                   NSMutableArray *keys = [[NSMutableArray alloc] init];
                   NSMutableArray *values = [[NSMutableArray alloc] init];
                  
                   for (id fieldsName in [[[[updateDictionary objectForKey:@"table"] objectForKey:tableName] objectForKey:@"record"]objectAtIndex:i]){
                       NSString *fieldsValue = [[[[[updateDictionary objectForKey:@"table"] objectForKey:tableName] objectForKey:@"record"]objectAtIndex:i]objectForKey:fieldsName];
                       [keys addObject:[NSString stringWithFormat:@"'%@'",fieldsName]];
                      
                      
                       if(fieldsValue == (NSString*)[NSNull null]){
                           fieldsValue = @"";
                       }
                       [values addObject:[NSString stringWithFormat:@"'%@'",fieldsValue]];
                   }
                  
                   NSString *keyString = [keys componentsJoinedByString:@", "];
                  
                   NSString *valueString = [values componentsJoinedByString:@", "];
                   NSString *sql = [NSString stringWithFormat:@"INSERT INTO %@ (%@) VALUES (%@)",tableName, keyString, valueString];
                   [self alertByString:sql];
                   [db executeUpdate:sql];
               }
           }
       }
   }
}

   



最新内容请见作者的GitHub页:http://qaseven.github.io/

   

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS开发数据库篇—SQL
iOS开发数据库篇—SQL 一、SQL语句 如果要在程序运行过程中操作数据库中的数据,那得先学会使用SQL语句 1.什么是SQL SQL(structured query language):结构化查询语言 SQL是一种对关系型数据库中的数据进行定义和操作的语言 SQL语言简洁,语法简单,好学好用   2.
681 0
IOS开发中常用的设计模式
说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下。 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例。 在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存。
901 0
iOS开发UI篇—IOS开发中Xcode的一些使用技巧
iOS开发UI篇—IOS开发中Xcode的一些使用技巧 一、快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件   视图 option + cmd + 回车 打开助理编辑器 cmd + 回车...
850 0
iOS开发那些事-iOS常用设计模式–委托模式
<p>对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析。当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式、委托模式、观察者模式、MVC模式。</p> <p><span id="more-129"></span></p> <p>委托模式</p> <p>委托模式从GoF 设计装饰(Decorator)、适配器(Adapter)和模板方法(T
1159 0
+关注
boxti
12535
10005
文章
1326
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载