IOS sqlite数据库增删改查

待我称王封你为后i 2022-08-11 12:59 338阅读 0赞

1.简介

简单封装sqlite数据库操作类 BaseDB 用于完成对sqlite的增删改查,使用前先导入libsqlite3.0.dylib库

2.BaseDB.h

  1. //
  2. // BaseDB.h
  3. // SqliteDemo
  4. //
  5. // Created by 赵超 on 14-8-26.
  6. // Copyright (c) 2014年 赵超. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "sqlite3.h"
  10. @interface BaseDB : NSObject
  11. /**
  12. * 创建一个表
  13. * sql:执行的SQL语句
  14. * dataName:数据库名称
  15. */
  16. -(void) createTable:(NSString*)sql dataBaseName:(NSString*) dataName;
  17. /**
  18. * 执行SQL语句,主要完成增加、修改、删除
  19. * sql:执行的SQL语句
  20. * params:SQL语句中的参数
  21. * dataName:数据库名称
  22. */
  23. -(BOOL) execSql:(NSString*)sql parmas:(NSArray*) params dataBaseName:(NSString*)dataName;
  24. /**
  25. * 选择数据
  26. * sql:查询的SQL语句
  27. * params:查询SQL语句中的参数
  28. * dataName:查询数据库名称
  29. */
  30. -(NSMutableArray*) selectSql:(NSString*)sql parmas:(NSArray*) params dataBaseName:(NSString*)dataName;
  31. @end

创建的数据库文件位于 /Users/zhaochao/Library/Application Support/iPhone Simulator/7.1/Applications/07D17328-B63C-4D87-9B6C-03AA5CD681EA/Documents/zhaochao.sqlite,

就是 NSString *fileName=[NSHomeDirectory() stringByAppendingFormat:@”/Documents/%@”,name]; 这个目录。文件可以直接用SQLiteManager软件打开,也可以在firefox浏览器中安装sqlitemanager插件打开,如下图

Center

3.BaseDB.m

  1. //
  2. // BaseDB.m
  3. // SqliteDemo
  4. //
  5. // Created by 赵超 on 14-8-26.
  6. // Copyright (c) 2014年 赵超. All rights reserved.
  7. //
  8. #import "BaseDB.h"
  9. @implementation BaseDB
  10. /*
  11. * 获取沙盒目录
  12. * name:追加的目录aa
  13. *
  14. */
  15. -(NSString*) DataBaseName:(NSString *) name {
  16. NSString *fileName=[NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@",name];
  17. return fileName;
  18. }
  19. /**
  20. * 选择数据
  21. * sql:查询的SQL语句
  22. * params:查询SQL语句中的参数
  23. * dataName:查询数据库名称
  24. */
  25. -(NSMutableArray*) selectSql:(NSString *)sql parmas:(NSArray *)params dataBaseName:(NSString *)dataName{
  26. sqlite3 *sqlite=nil;
  27. sqlite3_stmt *stmt=nil;
  28. //打开数据库
  29. NSString *fileName=[self DataBaseName:dataName];
  30. int result= sqlite3_open([fileName UTF8String], &sqlite);
  31. if (result!=SQLITE_OK) {
  32. NSLog(@"打开失败");
  33. return nil;
  34. }
  35. const char* sqlCh=[sql UTF8String];
  36. //编译SQL语句
  37. sqlite3_prepare_v2(sqlite, sqlCh, -1, &stmt, NULL);
  38. //绑定参数
  39. for (int i=0; i<params.count; i++) {
  40. NSString *param=[params objectAtIndex:i];
  41. sqlite3_bind_text(stmt, i+1, [param UTF8String], -1, NULL);
  42. }
  43. //执行查询语句
  44. result=sqlite3_step(stmt);
  45. NSMutableArray *resultData=[NSMutableArray array];
  46. //遍历结果
  47. while (result==SQLITE_ROW) {
  48. NSMutableDictionary *resultRow=[NSMutableDictionary dictionary];
  49. //获取字段个数
  50. int col_count = sqlite3_column_count(stmt);
  51. for (int i=0; i<col_count; i++) {
  52. //获取字段名称
  53. const char*columName=sqlite3_column_name(stmt,i);
  54. //获取字段值
  55. char* columValue=(char*) sqlite3_column_text(stmt, i);
  56. NSString *columkeyStr=[NSString stringWithCString:columName encoding:NSUTF8StringEncoding];
  57. NSString *columValueStr=[NSString stringWithCString:columValue encoding:NSUTF8StringEncoding];
  58. [resultRow setObject:columValueStr forKey:columkeyStr];
  59. }
  60. [resultData addObject:resultRow];
  61. result=sqlite3_step(stmt);
  62. }
  63. //关闭数据库句柄
  64. sqlite3_finalize(stmt);
  65. //关闭数据库
  66. sqlite3_close(sqlite);
  67. NSLog(@"查询完!");
  68. return resultData;
  69. }
  70. /**
  71. * 执行SQL语句,主要完成增加、修改、删除
  72. * sql:执行的SQL语句
  73. * params:SQL语句中的参数
  74. * dataName:数据库名称
  75. */
  76. -(BOOL) execSql:(NSString *)sql parmas:(NSArray *)params dataBaseName:(NSString *)dataName{
  77. sqlite3 *sqlite=nil;
  78. sqlite3_stmt *stmt=nil;
  79. //打开数据库
  80. NSString *fileName=[self DataBaseName:dataName];
  81. int result= sqlite3_open([fileName UTF8String], &sqlite);
  82. if (result!=SQLITE_OK) {
  83. NSLog(@"打开失败");
  84. return NO;
  85. }
  86. const char* sqlCh=[sql UTF8String];
  87. //编译SQL语句
  88. sqlite3_prepare_v2(sqlite, sqlCh, -1, &stmt, NULL);
  89. //绑定参数
  90. for (int i=0; i<params.count; i++) {
  91. NSString *parm=[params objectAtIndex:i];
  92. sqlite3_bind_text(stmt, i+1, [parm UTF8String], -1, NULL);
  93. }
  94. //执行SQL
  95. result=sqlite3_step(stmt);
  96. if (result==SQLITE_ERROR || result==SQLITE_MISUSE) {
  97. NSLog(@"执行SQL语句失败");
  98. sqlite3_close(sqlite);
  99. return NO;
  100. }
  101. //关闭数据库句柄
  102. sqlite3_finalize(stmt);
  103. //关闭数据库
  104. sqlite3_close(sqlite);
  105. NSLog(@"执行成功!");
  106. return YES;
  107. }
  108. /**
  109. * 创建一个表
  110. * sql:执行的SQL语句
  111. * dataName:数据库名称
  112. */
  113. -(void)createTable:(NSString *)sql dataBaseName:(NSString *)dataName{
  114. sqlite3 *sqlite=nil;
  115. NSString *fileName=[self DataBaseName:dataName];
  116. //打开数据库
  117. int result= sqlite3_open([fileName UTF8String], &sqlite);
  118. if (result!=SQLITE_OK) {
  119. NSLog(@"打开失败");
  120. }else{
  121. const char* sqlCh=[sql UTF8String];
  122. char* error;
  123. //执行SQL
  124. int result=sqlite3_exec(sqlite, sqlCh, NULL, NULL, &error);
  125. if (result!=SQLITE_OK) {
  126. NSLog(@"创建失败");
  127. NSLog(@"%s",error);
  128. sqlite3_close(sqlite);
  129. return ;
  130. }
  131. //关闭数据库
  132. sqlite3_close(sqlite);
  133. NSLog(@"创建成功");
  134. }
  135. }
  136. @end

4.调用格式

  1. BaseDB *db=[[BaseDB alloc] init];
  2. //创建表
  3. NSString *dbCreate=@"create table zhaochao( username text primary key,userPasswd test)";
  4. NSString *dbName=@"zhaochao.sqlite";
  5. // [db createTable:dbCreate dataBaseName:dbName];
  6. //添加数据
  7. NSString *insertTable=@"insert into zhaochao (username,userPasswd) values (?,?)";
  8. NSArray *insertParmas=@[@"acasdfaa",@"bb"];
  9. // [db execSql:insertTable parmas:insertParmas dataBaseName:@"zhaochao.sqlite"];
  10. //修改数据
  11. NSString *updateTable=@"update zhaochao set username=? where username=?";
  12. NSArray *updateParams=@[@"admin",@"zhaochao"];
  13. // [db execSql:updateTable parmas:updateParams dataBaseName:@"zhaochao.sqlite"];
  14. //删除数据
  15. NSString *deleteTable=@"delete from zhaochao where username=?";
  16. NSArray *deleteParams=@[@"aa"];
  17. // [db execSql:deleteTable parmas:deleteParams dataBaseName:@"zhaochao.sqlite"];
  18. //查询数据
  19. NSString *selectTable=@"select username,userPasswd from zhaochao where userPasswd=?";
  20. NSString *selectParam=@[@"bb"];
  21. NSArray *result=[db selectSql:selectTable parmas:selectParam dataBaseName:@"zhaochao.sqlite"];
  22. for (int i=0; i<result.count; i++) {
  23. NSMutableDictionary *arr=[result objectAtIndex:i];
  24. NSLog(@"%@",arr);
  25. }

发表评论

表情:
评论列表 (有 0 条评论,338人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SQLite 入门教程增删

    一、插入数据 INSERT INTO 表(列...) VALUES(值...) 根据前面几篇的内容,我们可以很轻送的创建一个数据表,并向其中插入一些数据,不多说,看例子: