ios开发中如何使用sqlite数据库增删改查呢?下面上ios object-c语言对sqlite数据库增删改查的代码,如果想使用sqlite可视化工具,推荐下载sqlitestudio,如何使用sqlitestudio可视化工具,只需要选择数据库文件夹所在的路径如user.db文件的绝对路径就好,如下(本人没有选择,抱歉)。
object-c中如何使用sqlite数据库呢?首先需要在项目中添加sqlite框架,如图。
然后在ios项目文件中导入sqlite3框架,如下。
#import <sqlite3.h>
下面是sqlite数据库增删改查的使用方法,如下。
#import "ViewController.h" #import <sqlite3.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSString *path = [self getPath]; //结果集定义 sqlite3_stmt *stmt; //创建或打开数据库 sqlite3 *database; //错误信息定义 char *erro = 0; int sqlStatus = sqlite3_open_v2([path UTF8String], &database,SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE,NULL); if (sqlStatus == SQLITE_OK) { NSLog(@"数据库创建成功"); } //创建数据库表 const char *sql = "create table if not exists siteList(id char,name char,parentSiteId char,userCount int)"; int tabelStatus = sqlite3_exec(database, sql, NULL, NULL, &erro); if (tabelStatus == SQLITE_OK) { NSLog(@"表创建成功"); } //插入数据 const char *insertSql = "insert into siteList (id,name,parentSiteId,userCount) values('5','赵六','呀呀',10)"; int insertResult = sqlite3_exec(database, insertSql, NULL,NULL, &erro); if (insertResult == SQLITE_OK) { NSLog(@"表数据增加成功!"); } //删除数据 const char *delSql = "delete from siteList where id = '2'"; int delResult = sqlite3_exec(database, delSql, NULL,NULL,&erro); if (delResult == SQLITE_OK) { NSLog(@"表数据删除成功!%s",erro); } //修改表数据 const char *updateSql = "update siteList set name = '小红' where id = '5'"; int updateResult = sqlite3_exec(database, updateSql, NULL, NULL, &erro); if (updateResult == SQLITE_OK) { NSLog(@"表数据修改成功!%d",delResult); } //查询数据 const char *selsql = "select id,name,parentSiteId,userCount from siteList where id = '6'"; int searchResult = sqlite3_prepare_v2(database, selsql, -1, &stmt, NULL); if (searchResult != SQLITE_OK) { NSLog(@"查询失败,%d",searchResult); }else{ // 查询的结果可能不止一条,直到 sqlite3_step(stmt) == SQLITE_ROW 说明查询到了数据 while (sqlite3_step(stmt) == SQLITE_ROW) { const unsigned char *id = sqlite3_column_text(stmt, 0); const unsigned char *name = sqlite3_column_text(stmt, 1); const unsigned char *parentSiteId = sqlite3_column_text(stmt, 2); const unsigned int userCount = sqlite3_column_int(stmt, 3); NSLog(@"%s===%s===%s===%d",id,name,parentSiteId,userCount); //汉字有可能会出现编码问题,转换编码方法如下 NSString *finalName = [NSString stringWithUTF8String:(const char*)name]; NSString *finalParentSite = [NSString stringWithUTF8String:(const char*)parentSiteId]; NSLog(@"UTF-8编码后的汉字:%@===%@",finalName,finalParentSite); } } //销毁stmt,回收资源 sqlite3_finalize(stmt); //关闭数据库 sqlite3_close(database); } //封装db数据库所在的document路径,打算将数据库放在document目录下,如:/user/xxx/document/user.db -(NSString *)getPath{ NSString *filename = @"user.db"; NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [doc stringByAppendingPathComponent:filename]; NSLog(@"%@",filePath); return filePath; } @end
注意事项:sqlite3_exec()和sqlite3_prepare_v2()这两个方法返回的int类型的值,两个方法的区别就是前者是执行增删改的操作,后者只执行查询语句的操作:
const char *delSql = "delete from siteList where id = '2'"; int delResult = sqlite3_exec(database, delSql, NULL,NULL,&erro); if (delResult == SQLITE_OK) { NSLog(@"表数据删除成功!%s",erro); }else{ NSLog(@"表数据删除不成功!%s",erro); }
如delResult只有当sql语句语法出错的时候才会显示删除不成功,也就是说“delResult == SQLITE_OK”如果delSql语句没有错误,即使id=2的数据不存在,也是会进入if语句并显示删除成功。所以在删除一条数据时,应该先根据id查询id=2的数据是否存在,如果存在后执行sqlite的删除语句,这时候如果仍然显示成功才算是真正的删除成功了,否则会与业务不符合,也就是说id=2的数据不存在是不应该显示删除成功的。