温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

sqlite操作与封装的示例分析

发布时间:2022-01-15 09:47:13 来源:亿速云 阅读:134 作者:小新 栏目:数据库

小编给大家分享一下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 <Foundation/Foundation.h>  

  13. #import <sqlite3.h>  


  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操作与封装的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI