iOS 开发之封装一个 sqlite3 数据库

iOS 开发之封装一个 sqlite3 数据库



新建一个类 DataManager 

在 DataManager.h 里面:

//  DataManager.h
//  数据库
//
//  Created by 杨鹏飞 on 15/8/12.
//  Copyright (c) 2015年 杨鹏飞. All rights reserved.

#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DataManager : NSObject
{
   sqlite3 *db;
}

+ (instancetype)shareManager;

// 创建数据库表格的方法
// @param 需要传一个 sql 语句
// @return yes 建表成功 no 建表失败
- (BOOL)createTableWithsql:(NSString *)sql;

// 插入数据
// @param 需要传一个 sql 语句
// @return yes 插入成功 no 插入失败
- (BOOL)insertMessageWithsql:(NSString *)sql;

// 删除数据
// @param 需要传一个 sql 语句
// @return yes 删除成功 no 删除失败
- (BOOL)deleteMessageWithsql:(NSString *)sql;

// 修改数据
// @param 需要传一个 sql 语句
// @return yes 修改成功 no 修改失败
- (BOOL)modifyMessageWithsql:(NSString *)sql;

// 查询数据库
// @param sql 需要传一个 sql 语句
// @param obj 要查询的值
// @param column 要查询的字段
// @return 查询的结果
- (NSArray *)queryMessageWithSQL:(NSString *)sql andObject:(NSString *)obj ;

@end



在 DataManager.m 里面:

//  DataManager.m
//  数据库
//
//  Created by 杨鹏飞 on 15/8/12.
//  Copyright (c) 2015年 杨鹏飞. All rights reserved.

#import "DataManager.h"

static DataManager *manager = nil;

@implementation DataManager

+ (instancetype)shareManager
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[DataManager alloc]init];
    });
    return manager;
}

- (int)openDB
{
//    打开数据库 
    NSString *dbPath = [ [ NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject ] stringByAppendingPathComponent:@"数据库.sqlite" ];
    
    NSLog(@"%@",dbPath);
    
//    打开数据库
    int result = sqlite3_open( [ dbPath UTF8String ] , &db );
    
    return result;
}


//关闭数据库
- (int)closeDB
{
    return sqlite3_close(db);
    
}


//  建表
- (BOOL)createTableWithsql:(NSString *)sql
{
    if ( [self openDB]==SQLITE_OK )
    {

       char *error;
       int result= sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);
        
         [ self closeDB ];
        if (result == SQLITE_OK) {
            NSLog(@"建表成功");
            return YES;
        }else{
            NSLog(@"%s",error);
            return NO;
        }
    }
    return NO;
}


// 插入数据
- (BOOL)insertMessageWithsql:(NSString *)sql
{
    if ([self openDB]==SQLITE_OK) {
        char *error ;
        
         int result = sqlite3_exec(db, [ sql UTF8String ], NULL, NULL, &error);
        [ self closeDB ];
        
      if (result)
        {
            return YES;
        }
        else
        {
            return NO;
        }
    }
    return NO;
}


//  删除数据
- (BOOL)deleteMessageWithsql:(NSString *)sql
{
    if ([self openDB]==SQLITE_OK) {
        char *error ;
        
        int result = sqlite3_exec(db, [ sql UTF8String ], NULL, NULL, &error);
        [ self closeDB ];
        
        if (result)
        {
            return YES;
        }
        else
        {
            return NO;
        }
    }
    return NO;
}


//  修改数据
- (BOOL)modifyMessageWithsql:(NSString *)sql
{
    if ([self openDB]==SQLITE_OK) {
        char *error ;
        
        int result = sqlite3_exec(db, [ sql UTF8String ], NULL, NULL, &error);
        [ self closeDB ];
        
        if (result)
        {
            return YES;
        }
        else
        {
            return NO;
        }
    }
    return NO;
}


// 查询数据
- (NSArray *)queryMessageWithSQL:(NSString *)sql andObject:(NSString *)obj
{
//    打开数据库
    if ([self openDB]==SQLITE_OK )
 {
        
    
//  声明一个结果集 查询的结果 存在结果集 里面
    sqlite3_stmt *stmt;
    
//    校验 SQL 语句是否正确
//    int nByte 为 -1 的时候 不限制 查询的长度
    if ( sqlite3_prepare_v2(db, [sql UTF8String] , -1, &stmt, NULL )==SQLITE_OK )
    {
      
//     绑定要查询的内容
       
     NSString *searchContent = [NSString stringWithFormat:@"%%%@%%",obj];
        
        if (sqlite3_bind_text(stmt, 1, [searchContent UTF8String], -1, NULL)==SQLITE_OK )
        {
//           resultlist 用来装查询到的所有数据
            NSMutableArray  *resultList =[ NSMutableArray array ];
//            循环 查询
            while (sqlite3_step(stmt)==SQLITE_ROW)
            {
//                icol 查询到的 这一条数据的列数
                char *name = (char *)sqlite3_column_text( stmt, 1);
                char *phone = (char *)sqlite3_column_text( stmt,2);
                char *time = (char *)sqlite3_column_text( stmt, 3 );
                
//                把查询到的一条数据整合到一个字典里面
                NSDictionary *info = @{@"name":[NSString stringWithUTF8String:name],@"phone":[NSString stringWithUTF8String:phone],@"time":[NSString stringWithUTF8String:time] };
                [resultList addObject:info];
            }
            [ self closeDB ];
            return resultList;
        }
    }
  }
    return nil;
}

@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值