UI进阶——SQL数据库

一、IOS开发中支持sqlite3轻量级数据库

在使用数据库之前,需要导入数据库相关的包。


在这里,我们封装一个数据库对象来操作数据库:

创建单例:

//单例
+(DataBaseHelper *)ShareSingleton{
    
    static DataBaseHelper* dataBaseHelper = nil;
    
    @synchronized(self) {
        if (dataBaseHelper == nil) {
             dataBaseHelper = [[DataBaseHelper alloc]init];
        }
    }
    
    return dataBaseHelper;
}


//创建数据库路径
-(void)dataBasePathWithName:(NSString*)fileName{
    
    
    //首先判断文件是否包含后缀名
    if (![fileName containsString:@".sqlite"]) {
        fileName = [fileName stringByAppendingString:@".sqlite"];
    }
    
    //拼接完整的数据库路径
    self.fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:fileName];
}

//创建数据库
-(sqlite3*)openOrCreateDB{
    
    /*//存储路径
    NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"db.sqlite"];*/
    
    //创建数据库指针
    sqlite3* sqlite = nil;
    //打开数据库
    int isOpen = sqlite3_open(self.fileName.UTF8String, &sqlite);
    
    //判断 是否打开成功
    if (isOpen == SQLITE_OK) {
        NSLog(@"打开成功");
        return sqlite;
    }else{
        NSLog(@"打开失败");
        return NULL;
    }
}
//执行无返回结果的操作
- (void)execSqlWithSQLString:(NSString*)SQLString message:(NSString*)message{
    
    //打开数据库
     sqlite3* sqlite = [self openOrCreateDB];
    //执行语句
    int isSuccessful = sqlite3_exec(sqlite, SQLString.UTF8String, NULL, NULL, NULL);
    //执行信息
    if (isSuccessful == SQLITE_OK) {
        NSLog(@"执行成功:%@ is successful",message);
    }else{
        NSLog(@"执行失败:%@ is fail",message);
    }
    //关闭数据库
    sqlite3_close(sqlite);
}

//通用的查询方法
-(NSArray*)querywithSQL:(NSString*)sqlStr{
    
    //打开数据库
    sqlite3 *sqlite = [self openOrCreateDB];
    
    //声明stmt指针
    sqlite3_stmt *stament;
    
    //初始化可变数据,用来盛放所有记录
    NSMutableArray* array = [[NSMutableArray alloc]init];
    
    int result = sqlite3_prepare_v2(sqlite, sqlStr.UTF8String, -1, &stament, NULL);
    
    if (result == SQLITE_OK) {
        
        //遍历没一条执行信息,并存储
        while (sqlite3_step(stament) == SQLITE_ROW) {
            
            //动态获得记录的字段数
            int count = sqlite3_column_count(stament);
            //存放数据信息
            NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];
            for (int i = 0 ; i < count ; i ++) {
                //确定该字段的类型
                int type = sqlite3_column_type(stament, i);
                //确定该字段的关键字
                const char *name = sqlite3_column_name(stament, i);
                NSString *key = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
                //根据类型取值
                switch (type) {
                    case SQLITE_TEXT:
                    {//string
                        NSString* str = [NSString stringWithCString:(const char*)sqlite3_column_text(stament, i) encoding:NSUTF8StringEncoding];
                        [mDic setObject:str forKey:key];
                    }
                    break;
                    case SQLITE_INTEGER:
                    {//int
                        NSInteger value = sqlite3_column_int(stament, i);
                        [mDic setObject:@(value) forKey:key];
                    }
                    break;
                    case SQLITE_BLOB:
                    {
                        
                    }
                    break;
                        
                    default:
                        break;
                }
            }
            //将记录添加到数组-
            [array addObject:mDic];
        }
        //关闭数据库,释放资源
        sqlite3_close(sqlite);
        //释放指针
        sqlite3_finalize(stament);
        //返回该值
        return array;
    }else{
        NSLog(@"查询语句有问题");
        //关闭数据库,释放资源
        sqlite3_close(sqlite);
        //释放指针
        sqlite3_finalize(stament);
        return  array;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值