最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

iOS object-c语言如何使用SQLite数据库增删改查操作

扩展 admin 浏览 评论

ios开发中如何使用sqlite数据库增删改查呢?下面上ios object-c语言对sqlite数据库增删改查的代码,如果想使用sqlite可视化工具,推荐下载sqlitestudio,如何使用sqlitestudio可视化工具,只需要选择数据库文件夹所在的路径如user.db文件的绝对路径就好,如下(本人没有选择,抱歉)。

6F53CE6F-5894-4EF4-BC82-AB603F563B86.png

object-c中如何使用sqlite数据库呢?首先需要在项目中添加sqlite框架,如图。

4541AF4B-2FF5-4C1A-B184-A603472B0BB4.png

然后在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的数据不存在是不应该显示删除成功的。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/kuozhan/86.html
"文章很值,打赏犒劳作者一下"
微信号: Javaweb_engineer

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论