加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite 操作与封装 与生成.a静态库相匹配

发布时间:2020-12-12 20:10:12 所属栏目:百科 来源:网络整理
导读:如果想更深的理解SQLITE的封请学习FMDB,FMDB是对SQLITE的线程访问封装。 以下是本人以个人习惯简单的封装。 符合D开发的操作者习惯。 ocsqlite.h [plain] view plain copy // //OCSqlite.m //sqlite // //Createdbyfengshon12-12-3. //Copyright(c)2012年sq

如果想更深的理解SQLITE的封请学习FMDB,FMDB是对SQLITE的线程访问封装。

以下是本人以个人习惯简单的封装。

符合D开发的操作者习惯。

ocsqlite.h

[plain] view plain copy
  1. //
  2. //OCSqlite.m
  3. //sqlite
  4. //
  5. //Createdbyfengshon12-12-3.
  6. //Copyright(c)2012年sqlite_Lib.Allrightsreserved.
  7. //
  8. /*
  9. 对SQLITE的封装,主要设计是操作上的习惯。对于轻量级数据量可以。
  10. 对于在数据量就需要注意内存的开销了。
  11. */
  12. #import<Foundation/Foundation.h>
  13. #import<sqlite3.h>
  14. enumfieldtype
  15. {
  16. ftInt,ftFloat,ftDouble,ftString,ftBlob,ftBool,ftDate,ftTime,ftDateTime,ftBinary
  17. };
  18. /*
  19. 字段类
  20. 作用:主要用于与数据库中的字段属性进行对应
  21. 字段名,字段类型,字段值,字段索引号
  22. */
  23. @interfaceOCField:NSObject
  24. {
  25. NSString*fieldName;
  26. idfieldValue;
  27. enumfieldtypemtype;
  28. intseq_column;
  29. }
  30. -(NSString*)toString;
  31. -(NSInteger)toInteger;
  32. -(NSDate*)toDate;
  33. -(NSString*)toDateString;
  34. -(NSString*)toTimeString;
  35. -(NSString*)toDateTimeString;
  36. -(NSNumber*)toNumber;
  37. -(enumfieldtype)getFieldType;
  38. @property(nonatomic)intseq_column;
  39. @end
  40. /*
  41. 数据集类
  42. 作用:
  43. 类似于数据源的集合,带游标,可访问数据源中的数据
  44. */
  45. @interfaceOCDataset:NSObject
  46. {
  47. NSMutableArray*records;
  48. NSIntegercursor;
  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. @interfaceOCSqlite: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 plain copy
  1. //
  2. //OCSqlite.m
  3. //sqlite
  4. //
  5. //Createdbyfengshon12-12-3.
  6. //Copyright(c)2012年sqlite_Lib.Allrightsreserved.
  7. //
  8. #import"OCSqlite.h"
  9. @implementationOCField
  10. @synthesizeseq_column;
  11. -(id)init
  12. {
  13. self=[superinit];
  14. if(self){
  15. fieldValue=NULL;
  16. returnself;
  17. }
  18. returnnil;
  19. }
  20. -(void)setfield:(NSString*)namewithvalue:(sqlite3_value*)valuewithtype:(NSString*)tp
  21. {
  22. fieldName=name;
  23. NSString*result=@"";
  24. if([tpisEqualToString:@"integer"]||[tpisEqualToString:@"smallint"])
  25. {
  26. mtype=ftInt;
  27. fieldValue=(id)sqlite3_value_int(value);
  28. return;
  29. }
  30. elseif([tpisEqualToString:@"boolean"])
  31. {
  32. mtype=ftBool;
  33. }
  34. elseif([tpisEqualToString:@"float"])
  35. {
  36. mtype=ftFloat;
  37. }
  38. elseif([tpisEqualToString:@"double"]||[tpisEqualToString:@"real"])
  39. {
  40. mtype=ftDouble;
  41. }
  42. elseif([tpisEqualToString:@"text"]||[tpisEqualToString:@"varchar"])
  43. {
  44. mtype=ftString;
  45. }
  46. elseif([tpisEqualToString:@"blob"])
  47. {
  48. mtype=ftBlob;
  49. return;
  50. }
  51. elseif([tpisEqualToString:@"date"])
  52. {
  53. mtype=ftDate;
  54. }
  55. elseif([tpisEqualToString:@"time"])
  56. {
  57. mtype=ftTime;
  58. }
  59. elseif([tpisEqualToString:@"timestamp"])
  60. {
  61. mtype=ftDateTime;
  62. }
  63. elseif([tpisEqualToString:@"binary"])
  64. {
  65. mtype=ftBinary;
  66. return;
  67. }
  68. char*floatstr=(char*)sqlite3_value_text(value);
  69. if(floatstr){
  70. result=[NSStringstringWithCString:floatstrencoding: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. caseftFloat:
  86. return[NSNumbernumberWithFloat:[(NSString*)fieldValuefloatValue]];
  87. break;
  88. caseftDouble:
  89. return[NSNumbernumberWithDouble:[(NSString*)fieldValuedoubleValue]];
  90. break;
  91. caseftBool:
  92. return[NSNumbernumberWithBool:[(NSString*)fieldValueboolValue]];
  93. break;
  94. default:
  95. return[NSNumbernumberWithInt:[(NSString*)fieldValueintValue]];
  96. break;
  97. }
  98. }
  99. -(NSString*)toDateString
  100. {
  101. NSDateFormatter*fmt=[[[NSDateFormatteralloc]init]autorelease];
  102. [fmtsetDateFormat:@"yyyy-mm-dd"];
  103. NSDate*date=[fmtdateFromString:fieldValue];
  104. NSString*datestr=[fmtstringFromDate:date];
  105. return(datestr==nil)?@"":datestr;
  106. }
  107. -(NSString*)toTimeString
  108. {
  109. NSDateFormatter*fmt=[[[NSDateFormatteralloc]init]autorelease];
  110. [fmtsetDateFormat:@"HH:mm:ss"];//H为0-23,h为1-12
  111. NSDate*time=[fmtdateFromString:fieldValue];
  112. NSString*timestr=[fmtstringFromDate:time];
  113. return(timestr==nil)?@"":timestr;
  114. }
  115. -(NSString*)toDateTimeString;
  116. {
  117. NSDateFormatter*fmt=[[[NSDateFormatteralloc]init]autorelease];
  118. [fmtsetDateFormat:@"yyyy-MM-ddHH:mm:ss"];//H为0-23,h为1-12
  119. NSDate*datetime=[fmtdateFromString:fieldValue];
  120. NSString*dtimestr=[fmtstringFromDate:datetime];
  121. return(dtimestr==nil)?@"":dtimestr;
  122. }
  123. -(NSDate*)toDate
  124. {
  125. NSDateFormatter*fmt=[[NSDateFormatteralloc]init];
  126. [fmtsetDateFormat:@"yyyy-MM-ddHH:mm:ss"];
  127. NSDate*date=[fmtdateFromString:fieldValue];
  128. returndate;
  129. }
  130. -(enumfieldtype)getFieldType
  131. {
  132. returnmtype;
  133. }
  134. @end
  135. @implementationOCDataset
  136. -(id)init
  137. {
  138. self=[superinit];
  139. if(self){
  140. cursor=-1;
  141. records=[[NSMutableArrayalloc]init];
  142. returnself;
  143. }
  144. returnnil;
  145. }
  146. -(void)dealloc
  147. {
  148. [recordsrelease];
  149. [superdealloc];
  150. }
  151. -(void)reset
  152. {
  153. cursor=0;
  154. }
  155. -(void)fillData:(sqlite3_stmt*)cmd
  156. {
  157. NSIntegercolcount=sqlite3_column_count(cmd);
  158. NSMutableDictionary*fields=[[[NSMutableDictionaryalloc]init]autorelease];
  159. for(NSIntegeri=0;i<colcount;i++){
  160. char*fieldname=(char*)sqlite3_column_name(cmd,i);
  161. NSString*strfieldname=[NSStringstringWithCString:fieldnameencoding:NSUTF8StringEncoding];
  162. sqlite3_value*mvalue=sqlite3_column_value(cmd,i);
  163. char*ity=(char*)sqlite3_column_decltype(cmd,i);
  164. NSString*stype=[NSStringstringWithCString:ityencoding:NSUTF8StringEncoding];
  165. //inttype=sqlite3_column_type(cmd,i);
  166. OCField*field=[[OCFieldalloc]init];
  167. [fieldsetfield:strfieldnamewithvalue:mvaluewithtype:stype];
  168. field.seq_column=i;
  169. [fieldssetObject:fieldforKey:strfieldname];
  170. }
  171. [recordsaddObject:fields];
  172. }
  173. -(void)clear
  174. {
  175. [recordsremoveAllObjects];
  176. cursor=-1;
  177. }
  178. -(NSInteger)count
  179. {
  180. return[recordscount];
  181. }
  182. -(OCField*)fieldbyname:(NSString*)fieldname
  183. {
  184. NSMutableDictionary*dic=[recordsobjectAtIndex:cursor];
  185. return(OCField*)[dicobjectForKey:fieldname];
  186. }
  187. -(BOOL)next
  188. {
  189. ++cursor;
  190. intrcount=[recordscount];
  191. if(cursor<=rcount){
  192. returnYES;
  193. }
  194. else
  195. {
  196. cursor=rcount+1;
  197. returnNO;
  198. }
  199. }
  200. -(BOOL)first
  201. {
  202. if([recordscount]>0){
  203. cursor=0;
  204. returnYES;
  205. }
  206. else
  207. {
  208. cursor=-1;
  209. returnNO;
  210. }
  211. }
  212. -(BOOL)move:(NSInteger)index
  213. {
  214. intidx=index-1;
  215. if(-1<idx<[recordscount]){
  216. cursor=idx;
  217. returnYES;
  218. }
  219. returnNO;
  220. }
  221. -(OCField*)indexOffield:(NSInteger)index
  222. {
  223. OCField*ret=nil;
  224. intct=0;
  225. NSMutableDictionary*dic=[recordsobjectAtIndex:cursor];
  226. for(NSString*keyindic)
  227. {
  228. ret=[dicobjectForKey:key];
  229. if(index==ct)
  230. break;
  231. else
  232. ct++;
  233. }
  234. returnret;
  235. }
  236. @end
  237. @implementationOCSqlite
  238. @synthesizedataset;
  239. -(id)init
  240. {
  241. self=[superinit];
  242. if(self){
  243. dataset=[[OCDatasetalloc]init];
  244. returnself;
  245. }
  246. returnnil;
  247. }
  248. -(void)dealloc
  249. {
  250. [datasetrelease];
  251. sqlite3_close(db);
  252. [superdealloc];
  253. }
  254. -(BOOL)ConnectToDB:(NSString*)dbfilepath
  255. {
  256. BOOLsuccessful;
  257. successful=sqlite3_open([dbfilepathUTF8String],&db)==SQLITE_OK;
  258. if(!successful){
  259. sqlite3_close(db);
  260. returnNO;
  261. }
  262. returnYES;
  263. }
  264. -(void)DisconnectDB
  265. {
  266. sqlite3_close(db);
  267. }
  268. -(BOOL)excesql:(NSString*)ddlsql
  269. {
  270. char*err;
  271. if(sqlite3_exec(db,[ddlsqlUTF8String],NULL,&err)!=SQLITE_OK)
  272. {
  273. returnNO;
  274. }
  275. returnYES;
  276. }
  277. -(BOOL)query:(NSString*)qysql
  278. {
  279. sqlite3_stmt*cmd;
  280. if(sqlite3_prepare_v2(db,[qysqlUTF8String],-1,&cmd,nil)!=SQLITE_OK)
  281. {
  282. returnNO;
  283. }
  284. [datasetclear];
  285. while(sqlite3_step(cmd)==SQLITE_ROW)
  286. {
  287. [datasetfillData:cmd];
  288. }
  289. [datasetreset];
  290. sqlite3_finalize(cmd);
  291. returnYES;
  292. }
  293. -(BOOL)startTranslation
  294. {
  295. char*err;
  296. if(sqlite3_exec(db,"begintransaction",&err)!=SQLITE_OK)
  297. {
  298. returnNO;
  299. }
  300. returnYES;
  301. }
  302. -(BOOL)commitTranslation
  303. {
  304. char*err;
  305. if(sqlite3_exec(db,"committransaction",&err)!=SQLITE_OK)
  306. {
  307. returnNO;
  308. }
  309. returnYES;
  310. }
  311. -(BOOL)rollbackTranslation
  312. {
  313. char*err;
  314. if(sqlite3_exec(db,"rollbacktransaction",&err)!=SQLITE_OK)
  315. {
  316. returnNO;
  317. }
  318. returnYES;
  319. }
  320. @end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读