數據庫

導入libsqlite3.0.dylib
#import <sqlite3.h>


//創建數據庫
+(void) creatDataBase
{
    //    if (dbPoint) {
    //        return dbPoint;
    //    }
    //目標路徑
    NSString * docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString * filePath=[docPath stringByAppendingPathComponent:@"PersonDB.rdb"];
    NSLog(@"%@",filePath);
    NSFileManager * manager=[[NSFileManageralloc] init];
    if ([manager fileExistsAtPath:filePath]) {
        [manager removeItemAtPath:filePath error:nil];
        NSLog(@"文件存在");
    }
    [manager release];
    //創建數據庫
    if (sqlite3_open([filePath UTF8String], &dbPoint)!=SQLITE_OK) {
        sqlite3_close(dbPoint);
        NSLog(@"打開失敗");
    }
    //創建表
    sqlite3_stmt * stmt=nil;
    int result=sqlite3_exec(dbPoint, "create table if not exists class(ID integer primary key,name text,sex text,del text,image BLOB)", nil, nil, nil);
    if (result==SQLITE_OK) {
        //sqlite3_finalize(stmt);
        NSLog(@"創建成功");
    }
    sqlite3_finalize(stmt);
    sqlite3_close(dbPoint);
}


--------------------------------------------------------------------------------------------------------------------

static sqlite3 * dbPoint=nil;


//打開數據庫
+(sqlite3 *) openDB
{
    if (dbPoint) {
        return dbPoint;
    }
    //目標文件路徑
    NSString * docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString * filePath=[docPath stringByAppendingPathComponent:@"Studentdb.rdb"];
    //原始路徑
    NSString * orignFilePath=[[NSBundle mainBundle] pathForResource:@"Studentdb" ofType:@"rdb"];
    //文件管理
    NSFileManager * manager=[NSFileManagerdefaultManager];
    //如果不存在數據庫則從bundle拷貝
    if ([manager fileExistsAtPath:filePath]==NO) {
        //如果拷貝失敗
        if ([manager copyItemAtPath:orignFilePath toPath:filePath error:nil]==NO) {
            return nil;
        }
    }
    sqlite3_open([filePath UTF8String], &dbPoint);
    return dbPoint;
}
//關閉數據庫
+(void) clodeDB
{
    if (dbPoint) {
        sqlite3_close(dbPoint);
    }
    
}

----------------------------------------------------------------------------------------------


+(NSMutableArray *)findAll;//所有人
//按ID查找人
+(Person *)findByID:(int)ID;
//總人數
+(int) count;
//更改人物信息
+(BOOL) updateName:(NSString *)name del:(NSString *)del age:(int)age whereID:(int)ID;
//增加人物
+(BOOL) addName:(NSString *)name del:(NSString *)del age:(int)age;
//刪除人物
+(BOOL) deletewhereID:(int)ID;


//查詢所有人
+(NSMutableArray *)findAll
{
    //打開數據庫
    sqlite3 * db=[Link openDB];
    //陳述
    sqlite3_stmt * stmt=nil;
    //準備SQL語句
    int result=sqlite3_prepare_v2(db, "select * from student", -1, &stmt, nil);
    if (result==SQLITE_OK) {
        NSMutableArray * allObject=[[NSMutableArray alloc] init];
        //單步執行語句
        while (SQLITE_ROW==sqlite3_step(stmt)) {
            int ID=sqlite3_column_int(stmt, 0);//第一字段
            const unsigned char * name=sqlite3_column_text(stmt, 1);//第二字段
            const unsigned char * del=sqlite3_column_text(stmt, 2);//第三字段
            int age=sqlite3_column_int(stmt, 3);//第四字段
            Person * person=[[Person alloc] initWithName:[NSString stringWithUTF8String:(char *)name] andDel:[NSString stringWithUTF8String:(char *)del] andAge:age andID:ID];
            [allObject addObject:person];
            [person release];
        }
        //釋放stmt對象
        sqlite3_finalize(stmt);
        return [allObject autorelease];
    }
    //釋放stmt對象
    sqlite3_finalize(stmt);
    returnnil;
}
//按ID查找
+(Person *) findByID:(int)ID
{
    //打開數據庫
    sqlite3 * db=[Link openDB];
    //陳述
    sqlite3_stmt * stmt=nil;
    //準備SQL語句
    int result=sqlite3_prepare_v2(db, "select * from student where ID=?", -1, &stmt, nil);
    if (result==SQLITE_OK) {
        //將第一個?替換爲ID
        sqlite3_bind_int(stmt, 1, ID);
        while (SQLITE_ROW==sqlite3_step(stmt)) {
            const unsigned char * name=sqlite3_column_text(stmt, 1);//第二字段
            const unsigned char * del=sqlite3_column_text(stmt, 2);//第三字段
            int age=sqlite3_column_int(stmt, 3);//第四字段
            Person * person=[[Person alloc] initWithName:[NSString stringWithUTF8String:(char *)name] andDel:[NSString stringWithUTF8String:(char *)del] andAge:age andID:ID];
            sqlite3_finalize(stmt);
            return [person autorelease];
        }
    }
    sqlite3_finalize(stmt);
    returnnil;
}
//總人數
+(int) count
{
    //打開數據庫
    sqlite3 * db=[Link openDB];
    //陳述
    sqlite3_stmt * stmt=nil;
    //準備SQL語句
    int result=sqlite3_prepare_v2(db, "select count (*) from student", -1, &stmt, nil);
    if (result==SQLITE_OK) {
        if (SQLITE_ROW==sqlite3_step(stmt)) {
            int count=sqlite3_column_int(stmt, 0);
            sqlite3_finalize(stmt);
            return count;
        }
    }
    sqlite3_finalize(stmt);
    return 0;
    
}
//更改人物信息
+(BOOL) updateName:(NSString *)name del:(NSString *)del age:(int)age whereID:(int)ID
{
    //打開數據庫
    sqlite3 *db=[Link openDB];
    //陳述
    sqlite3_stmt * stmt=nil;
    //準備SQl語句
    int result=sqlite3_prepare_v2(db, "update student set name=?,age=?,del=? where ID=?", -1, &stmt, nil);
    if (result==SQLITE_OK) {        
        sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);//將第一個?替換成name
        sqlite3_bind_int(stmt, 2, age);//將第二個?替換成age
        sqlite3_bind_text(stmt, 3, [del UTF8String], -1, nil);//將第三個?替換成del
        sqlite3_bind_int(stmt, 4, ID);//將第四個?替換成ID
        if(sqlite3_step(stmt)==SQLITE_DONE){
            NSLog(@"更改成功");
            sqlite3_finalize(stmt);
            return YES;
        }        
    }
    sqlite3_finalize(stmt);
    NSLog(@"更改失敗");
    returnNO;
}
//增加人物
+(BOOL) addName:(NSString *)name del:(NSString *)del age:(int)age
{
    //打開數據庫
    sqlite3 * db=[Link openDB];
    //陳述
    sqlite3_stmt * stmt=nil;
    //準備SQL語句
    int result=sqlite3_prepare_v2(db, "insert into student(name,del,age) values (?,?,?)", -1, &stmt, nil);
    if (result==SQLITE_OK) {
        sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);//將第一個?替換成name
        sqlite3_bind_int(stmt, 2, age);//將第二個?替換成age
        sqlite3_bind_text(stmt, 3, [del UTF8String], -1, nil);//將第三個?替換成del
        if (sqlite3_step(stmt)==SQLITE_DONE) {
            NSLog(@"添加成功");
            sqlite3_finalize(stmt);
            return YES;
        }
    }
    NSLog(@"添加失敗");
    sqlite3_finalize(stmt);
    returnNO;
}
//刪除人物
+(BOOL) deletewhereID:(int)ID
{
    //打開數據庫
    sqlite3 * db=[Link openDB];
    //陳述
    sqlite3_stmt * stmt=nil;
    //準備SQL語句
    int result=sqlite3_prepare_v2(db, "delete from student where ID=?", -1, &stmt, nil);
    if (result==SQLITE_OK) {
        //將第一個?替換爲ID
        sqlite3_bind_int(stmt, 1, ID);
        if (sqlite3_step(stmt)==SQLITE_DONE) {
            NSLog(@"刪除成功");
            sqlite3_finalize(stmt);
            return YES;
        }
    }
    NSLog(@"刪除失敗");
    sqlite3_finalize(stmt);
    returnNO;
}


-----------------------------------------------------------------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章