热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqlite操作与封装的示例分析

小编给大家分享一下sqlite操作与封装的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收

小编给大家分享一下sqlite操作与封装的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

ocsqlite.h

[plain]
view plaincopy

  1. //  

  2. //  OCSqlite.m  

  3. //  sqlite  

  4. //  

  5. //  Created by fengsh on 12-12-3.  

  6. //  Copyright (c) 2012年 sqlite_Lib. All rights reserved.  

  7. //  

  8. /*  

  9.  对SQLITE的封装,主要设计是操作上的习惯。对于轻量级数据量可以。  

  10.  对于在数据量就需要注意内存的开销了。  

  11.  */  


  12. #import   

  13. #import   


  14. enum fieldtype  

  15. {  

  16.     ftInt,ftFloat,ftDouble,ftString,ftBlob,ftBool,ftDate,ftTime,ftDateTime,ftBinary  

  17. };  


  18. /*  

  19.  字段类  

  20.  作用:主要用于与数据库中的字段属性进行对应  

  21.  字段名,字段类型,字段值,字段索引号  

  22.  */  

  23. @interface OCField : NSObject   

  24. {      

  25.     NSString* fieldName;  

  26.     id fieldValue;  

  27.     enum fieldtype mtype;  

  28.     int seq_column;  

  29. }  


  30. -(NSString*)toString;  

  31. -(NSInteger)toInteger;  

  32. -(NSDate*)toDate;  

  33. -(NSString*)toDateString;  

  34. -(NSString*)toTimeString;  

  35. -(NSString*)toDateTimeString;  

  36. -(NSNumber*)toNumber;  


  37. -(enum fieldtype)getFieldType;  


  38. @property (nonatomic) int seq_column;  


  39. @end  


  40. /*  

  41.  数据集类  

  42.  作用:  

  43.  类似于数据源的集合,带游标,可访问数据源中的数据  

  44.  */  

  45. @interface OCDataset : NSObject  

  46. {  

  47.     NSMutableArray* records;  

  48.     NSInteger cursor;  

  49. }  


  50. -(void)clear;  

  51. -(NSInteger)count;  

  52. -(BOOL)next;  

  53. -(BOOL)first;  

  54. -(BOOL)move:(NSInteger) index;  

  55. -(OCField*)fieldbyname:(NSString*) fieldname;  

  56. -(OCField*)indexOffield:(NSInteger) index;  


  57. @end  


  58. /*  

  59. 简单的数据定义语言操作及数据库查询的封装  

  60.  未支持参数绑定,因此在处理blob上还需要扩展代码。  

  61.  后续完善  

  62.  */  

  63. @interface OCSqlite : NSObject  

  64. {  

  65.     sqlite3* db;  

  66.     OCDataset* dataset;  

  67. }  


  68. -(id)init;  


  69. -(BOOL)ConnectToDB:(NSString*) dbfilepath;  

  70. -(void)DisconnectDB;  


  71. -(BOOL)startTranslation;  

  72. -(BOOL)commitTranslation;  

  73. -(BOOL)rollbackTranslation;  


  74. -(BOOL)excesql:(NSString*) ddlsql;  

  75. -(BOOL)query:(NSString*) qysql;  


  76. @property (nonatomic,readonly) OCDataset* dataset;  


  77. @end  

ocsqlite.m

[plain]
view plaincopy

  1. //  

  2. //  OCSqlite.m  

  3. //  sqlite  

  4. //  

  5. //  Created by fengsh on 12-12-3.  

  6. //  Copyright (c) 2012年 sqlite_Lib. All rights reserved.  

  7. //  


  8. #import "OCSqlite.h"  



  9. @implementation OCField  


  10. @synthesize seq_column;  


  11. -(id)init  

  12. {  

  13.     self = [super init];  

  14.     if (self) {  

  15.         fieldValue = NULL;  

  16.         return self;  

  17.     }  

  18.     return nil;  

  19. }  


  20. -(void)setfield:(NSString*) name withvalue:(sqlite3_value*) value withtype:(NSString*) tp  

  21. {  

  22.     fieldName = name;  


  23.     NSString* result = @"";  


  24.     if ([tp isEqualToString:@"integer"]||[tp isEqualToString:@"smallint"])  

  25.     {  

  26.         mtype = ftInt;  

  27.         fieldValue = (id)sqlite3_value_int(value);  

  28.         return;  

  29.     }  

  30.     else if ([tp isEqualToString:@"boolean"])  

  31.     {  

  32.         mtype = ftBool;  

  33.     }  

  34.     else if ([tp isEqualToString:@"float"])  

  35.     {  

  36.         mtype = ftFloat;  


  37.     }  

  38.     else if ([tp isEqualToString:@"double"]||[tp isEqualToString:@"real"])  

  39.     {  

  40.         mtype = ftDouble;  

  41.     }  

  42.     else if ([tp isEqualToString:@"text"]||[tp isEqualToString:@"varchar"])  

  43.     {  

  44.         mtype = ftString;  

  45.     }  

  46.     else if ([tp isEqualToString:@"blob"])  

  47.     {  

  48.         mtype = ftBlob;  

  49.         return;  

  50.     }  

  51.     else if ([tp isEqualToString:@"date"])  

  52.     {  

  53.         mtype = ftDate;  

  54.     }  

  55.     else if ([tp isEqualToString:@"time"])  

  56.     {  

  57.         mtype = ftTime;  


  58.     }  

  59.     else if ([tp isEqualToString:@"timestamp"])  

  60.     {  

  61.         mtype = ftDateTime;  


  62.     }  

  63.     else if ([tp isEqualToString:@"binary"])  

  64.     {  

  65.         mtype = ftBinary;  

  66.         return;  

  67.     }  


  68.     char* floatstr = (char*)sqlite3_value_text(value);  

  69.     if (floatstr) {  

  70.         result = [NSString stringWithCString:floatstr encoding:NSUTF8StringEncoding];  

  71.     }  

  72.     fieldValue = result;  

  73. }  


  74. -(NSString*)toString  

  75. {  

  76.     return (NSString*)fieldValue;  

  77. }  


  78. -(NSInteger)toInteger  

  79. {  

  80.     return (int)fieldValue;  

  81. }  


  82. -(NSNumber*)toNumber  

  83. {  

  84.     switch (mtype) {  

  85.         case ftFloat:  

  86.             return [NSNumber numberWithFloat:[(NSString*)fieldValue floatValue]];  

  87.             break;  


  88.         case ftDouble:  

  89.             return [NSNumber numberWithDouble:[(NSString*)fieldValue doubleValue]];   

  90.             break;  


  91.         case ftBool:  

  92.             return [NSNumber numberWithBool:[(NSString*)fieldValue boolValue]];  

  93.             break;  

  94.         default:  

  95.             return [NSNumber numberWithInt:[(NSString*)fieldValue intValue]];  

  96.             break;  

  97.     }  


  98. }  


  99. -(NSString*)toDateString  

  100. {  

  101.     NSDateFormatter* fmt = [[[NSDateFormatter alloc]init]autorelease];  


  102.     [fmt setDateFormat:@"yyyy-mm-dd"];  

  103.     NSDate* date = [fmt dateFromString:fieldValue];  


  104.     NSString* datestr = [fmt stringFromDate:date];  


  105.     return (datestr==nil) ? @"":datestr;  

  106. }  


  107. -(NSString*)toTimeString  

  108. {  

  109.     NSDateFormatter* fmt = [[[NSDateFormatter alloc]init]autorelease];  


  110.     [fmt setDateFormat:@"HH:mm:ss"];//H为0-23,h为1-12  


  111.     NSDate* time = [fmt dateFromString:fieldValue];  


  112.     NSString* timestr = [fmt stringFromDate:time];  


  113.     return (timestr==nil) ? @"":timestr;  

  114. }  


  115. -(NSString*)toDateTimeString;  

  116. {  

  117.     NSDateFormatter* fmt = [[[NSDateFormatter alloc]init]autorelease];  


  118.     [fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"];//H为0-23,h为1-12  


  119.     NSDate* datetime = [fmt dateFromString:fieldValue];  


  120.     NSString* dtimestr = [fmt stringFromDate:datetime];  


  121.     return (dtimestr==nil) ? @"":dtimestr;  

  122. }  


  123. -(NSDate*)toDate  

  124. {  


  125.      NSDateFormatter* fmt = [[NSDateFormatter alloc]init];  


  126.      [fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  


  127.      NSDate* date = [fmt dateFromString:fieldValue];  


  128.      return date;  


  129. }  



  130. -(enum fieldtype)getFieldType  

  131. {  

  132.     return mtype;  

  133. }  


  134. @end  


  135. @implementation OCDataset  


  136. -(id)init  

  137. {  

  138.     self = [super init];  

  139.     if (self) {  

  140.         cursor = -1;  

  141.         records = [[NSMutableArray alloc]init];  

  142.         return self;  

  143.     }  

  144.     return nil;  

  145. }  


  146. -(void)dealloc  

  147. {  

  148.     [records release];  

  149.     [super dealloc];  

  150. }  


  151. -(void)reset  

  152. {  

  153.     cursor = 0;  

  154. }  


  155. -(void)fillData:(sqlite3_stmt*) cmd  

  156. {  

  157.     NSInteger colcount = sqlite3_column_count(cmd);  


  158.     NSMutableDictionary* fields = [[[NSMutableDictionary alloc]init]autorelease];  

  159.     for (NSInteger i = 0; i < colcount; i++) {  

  160.         char* fieldname = (char*)sqlite3_column_name(cmd, i);  

  161.         NSString* strfieldname = [NSString stringWithCString:fieldname encoding:NSUTF8StringEncoding];  

  162.         sqlite3_value* mvalue = sqlite3_column_value(cmd, i);  


  163.         char* ity = (char*)sqlite3_column_decltype(cmd, i);  


  164.         NSString* stype = [NSString stringWithCString:ity encoding:NSUTF8StringEncoding];  

  165.         //int type = sqlite3_column_type(cmd, i);  


  166.         OCField* field = [[OCField alloc]init];  


  167.         [field setfield:strfieldname withvalue:mvalue withtype:stype];  

  168.         field.seq_column = i;  



  169.         [fields setObject:field forKey:strfieldname];  

  170.     }  

  171.     [records addObject:fields];  

  172. }  


  173. -(void)clear  

  174. {  

  175.     [records removeAllObjects];  

  176.     cursor = -1;  

  177. }  


  178. -(NSInteger)count  

  179. {  

  180.     return [records count];  

  181. }  


  182. -(OCField*)fieldbyname:(NSString*) fieldname  

  183. {  

  184.     NSMutableDictionary* dic = [records objectAtIndex:cursor];  


  185.     return (OCField*)[dic objectForKey:fieldname];  

  186. }  


  187. -(BOOL)next  

  188. {  

  189.     ++cursor;  

  190.     int rcount = [records count];  

  191.     if (cursor <= rcount) {  

  192.         return YES;  

  193.     }  

  194.     else  

  195.     {  

  196.         cursor = rcount+1;  

  197.         return NO;  

  198.     }  

  199. }  


  200. -(BOOL)first  

  201. {  

  202.     if ([records count]>0) {  

  203.         cursor = 0;  

  204.         return YES;  

  205.     }  

  206.     else  

  207.     {  

  208.         cursor = -1;  

  209.         return NO;  

  210.     }  

  211. }  


  212. -(BOOL)move:(NSInteger) index  

  213. {  

  214.     int idx = index -1;  

  215.     if (-1 < idx < [records count]) {  

  216.         cursor = idx;  

  217.         return YES;  

  218.     }  

  219.     return NO;  

  220. }  


  221. -(OCField*)indexOffield:(NSInteger) index  

  222. {  

  223.     OCField* ret = nil;  

  224.     int ct = 0;  

  225.     NSMutableDictionary* dic = [records objectAtIndex:cursor];  

  226.     for (NSString* key in dic)  

  227.     {  

  228.         ret = [dic objectForKey:key];  


  229.         if (index == ct)  

  230.             break;  

  231.         else  

  232.             ct++;  


  233.     }  

  234.     return ret;  

  235. }  


  236. @end  




  237. @implementation OCSqlite  


  238. @synthesize dataset;  


  239. -(id)init  

  240. {  

  241.     self = [super init];  

  242.     if (self) {  


  243.         dataset = [[OCDataset alloc]init];  

  244.         return self;  

  245.     }  

  246.     return nil;  

  247. }  


  248. -(void)dealloc  

  249. {  

  250.     [dataset release];  

  251.     sqlite3_close(db);  

  252.     [super dealloc];  

  253. }  


  254. -(BOOL)ConnectToDB:(NSString*) dbfilepath  

  255. {  

  256.     BOOL successful;  

  257.     successful = sqlite3_open([dbfilepath UTF8String], &db)==SQLITE_OK;  


  258.     if (!successful) {  

  259.         sqlite3_close(db);  

  260.         return NO;  

  261.     }  


  262.     return YES;  

  263. }  


  264. -(void)DisconnectDB  

  265. {  

  266.     sqlite3_close(db);   

  267. }  


  268. -(BOOL)excesql:(NSString*) ddlsql  

  269. {  

  270.     char* err;  

  271.     if (sqlite3_exec(db, [ddlsql UTF8String], NULL, NULL, &err)!=SQLITE_OK)  

  272.     {  

  273.         return NO;  

  274.     }  

  275.     return YES;  

  276. }  


  277. -(BOOL)query:(NSString*) qysql  

  278. {  

  279.     sqlite3_stmt* cmd;  


  280.     if (sqlite3_prepare_v2(db, [qysql UTF8String], -1, &cmd, nil)!=SQLITE_OK)  

  281.     {  

  282.         return NO;  

  283.     }  


  284.     [dataset clear];  


  285.     while(sqlite3_step(cmd)==SQLITE_ROW)  

  286.     {  

  287.         [dataset fillData:cmd];  

  288.     }  


  289.     [dataset reset];  


  290.     sqlite3_finalize(cmd);  


  291.     return YES;  

  292. }  



  293. -(BOOL)startTranslation  

  294. {  

  295.     char* err;  

  296.     if (sqlite3_exec(db, "begin transaction",NULL, NULL, &err)!=SQLITE_OK)  

  297.     {  

  298.         return NO;  

  299.     }  

  300.     return YES;  

  301. }  


  302. -(BOOL)commitTranslation  

  303. {  

  304.     char* err;  

  305.     if (sqlite3_exec(db, "commit transaction",NULL, NULL, &err)!=SQLITE_OK)  

  306.     {  

  307.         return NO;  

  308.     }  

  309.     return YES;  

  310. }  


  311. -(BOOL)rollbackTranslation  

  312. {  

  313.     char* err;  

  314.     if (sqlite3_exec(db, "rollback transaction",NULL, NULL, &err)!=SQLITE_OK)  

  315.     {  

  316.         return NO;  

  317.     }  

  318.     return YES;  

  319. }  



  320. @end 

以上是“sqlite操作与封装的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程笔记行业资讯频道!


推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
author-avatar
Metoo婧婧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有