Chinaunix首页 | 论坛 | 博客
  • 博客访问: 358160
  • 博文数量: 78
  • 博客积分: 3380
  • 博客等级: 中校
  • 技术积分: 857
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-16 19:39
文章分类

全部博文(78)

文章存档

2011年(31)

2010年(47)

分类: BSD

2011-10-11 16:58:00

//
#import
#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]; 
}
阅读(3730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~