Ios 封装sqllite3的接口

//
#import <Foundation/Foundation.h> 
#import "sqlite3.h" 
@interface Sqllib : NSObject 
{  
    sqlite3 *m_sql;  
    NSString *m_dbName;  
} 
@property(nonatomic)sqlite3*  m_sql;  
@property(nonatomic,retain)NSString*  m_dbName;
  
-(id)initWithDbName:(NSString*)dbname;  
-(BOOL)openOrCreateDatabase:(NSString*)DbName;  
-(BOOL)createTable:(NSString*)sqlCreateTable;  
-(void)closeDatabase;  
-(BOOL)InsertTable:(NSString*)sqlInsert;  
-(BOOL)UpdataTable:(NSString*)sqlUpdata;  
-(NSArray*)querryTable:(NSString*)sqlQuerry;  
-(NSArray*)querryTableByCallBack:(NSString*)sqlQuerry;  
@end
 
//
#import "sqllib.h"  
@implementation Sqllib 
 
@synthesize m_sql;  
@synthesize m_dbName;
  
-(id) initWithDbName:(NSString*)dbname  
{  
    self = [super init];  
    if (self != nil) {  
       if ([self openOrCreateDatabase:dbname]) {  
            [self closeDatabase];  
        }  
    }  
    return self;  
}  
-(id) init  
{  
    NSAssert(0,@"Never Use this.Please Call Use initWithDbName:(NSString*)");  
    return nil;  
}  
-(void) dealloc  
{  
    self.m_sql = nil;  
    self.m_dbName =nil;  
    [super dealloc];  
}  
//创建数据库  
-(BOOL)openOrCreateDatabase:(NSString*)dbName  
{  
    self.m_dbName = dbName;  
    NSArray *path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
    NSString *documentsDirectory = [path objectAtIndex:0];  
    if(sqlite3_open([[documentsDirectorystringByAppendingPathComponent:dbName] UTF8String],&m_sql) !=SQLITE_OK)  
    {  
        NSLog(@"创建数据库失败");  
        return NO;  
    }  
    return YES;  
} 
//关闭数据库  
-(void)closeDatabase  
{  
    sqlite3_close(self.m_sql);   
} 
 
//创建表 
-(BOOL)createTable:(NSString*)sqlCreateTable  
{  
    if (![selfopenOrCreateDatabase:self.m_dbName]) {  
        return NO;  
    }  
    char *errorMsg;  
    if (sqlite3_exec (self.m_sql, [sqlCreateTable UTF8String],NULL, NULL, &errorMsg) != SQLITE_OK)  
    {  
        NSLog(@"创建数据表失败:%s",errorMsg);  
        return NO;  
    }  
    [selfcloseDatabase];  
    return YES;  
}   
//插入表   
-(BOOL)InsertTable:(NSString*)sqlInsert  
{  
    if (![selfopenOrCreateDatabase:self.m_dbName]) {  
        return NO;  
    }  
   char* errorMsg = NULL;  
    if(sqlite3_exec(self.m_sql, [sqlInsertUTF8String],0, NULL, &errorMsg) ==SQLITE_OK)  
  {  
    [selfcloseDatabase];  
    returnYES;
  }  
    else 
    {  
        printf("更新表失败:%s",errorMsg);  
        [selfcloseDatabase];  
        return NO;  
    }  
    return YES;  
}  
//更新表   
-(BOOL)UpdataTable:(NSString*)sqlUpdata
{  
 if (![selfopenOrCreateDatabase:self.m_dbName]) 
 {  
   return NO;  
 }  
 char *errorMsg;  
 if (sqlite3_exec (self.m_sql, [sqlUpdata UTF8String],0, NULL, &errorMsg) !=SQLITE_OK)  
 {  
  [selfcloseDatabase];  
  returnYES;  
 }
 else 
 {  
  returnNO;  
 }    
 return YES;  
}  
//查询表 
-(NSArray*)querryTable:(NSString*)sqlQuerry  
{  
    if (![selfopenOrCreateDatabase:self.m_dbName]) {  
        return nil;  
    }  
    int row = 0;  
    int column = 0;  
    char*    errorMsg = NULL;  
    char**    dbResult = NULL;  
    NSMutableArray*    array = [[NSMutableArrayalloc] init];  
    if(sqlite3_get_table(m_sql, [sqlQuerryUTF8String], &dbResult, &row,&column,&errorMsg ) == SQLITE_OK)  
    {  
       if (0 == row) {  
            [self closeDatabase];  
            return nil;  
        }  
        int index = column;  
        for(int i =0; i < row ; i++ ) {    
            NSMutableDictionary*    dic = [[NSMutableDictionaryalloc] init];  
            for(int j =0 ; j < column; j++ ) {  
                if (dbResult[index]) {  
                    NSString*    value = [[NSStringalloc] initWithUTF8String:dbResult[index]];  
                    NSString*    key = [[NSStringalloc] initWithUTF8String:dbResult[j]];  
                    [dic setObject:value forKey:key];  
                    [value release];  
                    [key release];  
                }  
                index ++;  
            }   
            [array addObject:dic];  
            [dic release];  
        }  
    }else {  
        printf("%s",errorMsg);  
        [selfcloseDatabase];  
        return nil;  
    }  
    [selfcloseDatabase];  
    return [array autorelease];  
}  
//select   
int processData(void* arrayResult,int columnCount,char** columnValue,char** columnName)  
{  
    int i;   
    NSMutableDictionary* dic = [[NSMutableDictionaryalloc] init];  
    for( i = 0 ; i < columnCount; i ++ )   
    {   
       if (columnValue[i]) 
       {  
            NSString* key = [[NSStringalloc] initWithUTF8String:columnName[i]];  
            NSString* value = [[NSStringalloc] initWithUTF8String:columnValue[i]];  
            [dic setObject:value forKey:key];  
        }  
    }   
    [(NSMutableArray*)arrayResult addObject:dic];  
    [dic release];  
    return 0;   
}  
//select   
-(NSArray*)querryTableByCallBack:(NSString*)sqlQuerry  
{  
    if (![selfopenOrCreateDatabase:self.m_dbName]) 
    {  
        return nil;  
    }  
    char*    errorMsg = NULL;  
    NSMutableArray* arrayResult = [[NSMutableArrayalloc] init];  
    if (sqlite3_exec(self.m_sql,[sqlQuerryUTF8String],processData,(void*)arrayResult,&errorMsg) !=SQLITE_OK) 
    {  
        printf("查询出错:%s",errorMsg);  
    }  
    [selfcloseDatabase];  
    return [arrayResult autorelease];  
} 
 
@end
 
 
//
/*IOS开发中sqlite数据库的使用方法。
*sqlite数据库初始化,复制到用户目录,并判断是否数据库已经存在,或者复制是否成功;
*在AppDelegate.m中输入以下代码,以便复制预置数据库到指定doucment目录
*/
- (BOOL) initializeDb 
{  
 NSLog (@"initializeDB");
 NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
 NSString *documentFolderPath = [searchPaths objectAtIndex: 0];  
 //查看文件目录  
 NSLog(@"%@",documentFolderPath);  
 dbFilePath = [documentFolderPath stringByAppendingPathComponent:@"shopping.db"];
 [dbFilePath retain];    
 if (! [[NSFileManager defaultManager] fileExistsAtPath: dbFilePath]) 
 {   
  NSString *backupDbPath = [[NSBundle mainBundle] pathForResource:@"shopping" ofType:@"db"];  
  if (backupDbPath == nil) 
  {    
    return NO;  
  } 
  else 
  {  
    BOOL copiedBackupDb = [[NSFileManager defaultManager] copyItemAtPath:backupDbPath toPath:dbFilePath error:nil];  
    if (! copiedBackupDb) 
    { 
      return NO;  
    }  
  }  
 }  
 return YES;  
}  
- (void)applicationDidFinishLaunching:(UIApplication *)application 
{  
  if (! [self initializeDb]) 
  {  
   NSLog (@"couldn't init db");  
   return;  
  }      
    [window addSubview:tabBarController.view];  
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值