IOS之數據庫的查找,刪除,添加,更新 – iPhone手機開發技術文章 iPhone軟體開發教學課程

DB類之.h文件
#import <Foundation/Foundation.h>
#import <sqlite3.h>

@interface DB : NSObject
+(sqlite3 *)openDB;//打開數據庫
-(void)closeDB;//關閉數據庫

@end

DB類之.m文件
#import "DB.h"
#import <sqlite3.h>
static sqlite3 *db = nil;
@implementation DB
+(sqlite3 *)openDB
{
    if(db)
    {
        return db;
    }
    //目標路徑
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDirectory, YES)objectAtIndex:0];
    //原始路徑
    NSString *filePath = [docPath stringByAppendingPathComponent:@"db.sqlite"];
   
    NSFileManager *fm = [NSFileManager defaultManager];
   
    if ([fm fileExistsAtPath:filePath] == NO)//如果doc下沒有數據庫,從bundle裡面拷貝過來
 
    {
        NSString *bundle = [[NSBundle mainBundle]pathForResource:@"classDB" ofType:@"sqlite"];
       
        NSError *err = nil;
       
        if ([fm copyItemAtPath:bundle toPath:filePath error:&err] == NO) //如果拷貝失敗
        {
            NSLog(@"%@",[err localizedDescription]);
        }
       
       
    }
    sqlite3_open([filePath UTF8String], &db);
    return db;  
}
-(void)closeDB
{
    if (db)
    {
        sqlite3_close(db);  
    }
   
}
@end
Person類.h文件
#import <Foundation/Foundation.h>

@interface Person : NSObject
@property(nonatomic,retain)NSString *name,*phone;
@property(nonatomic,assign)int age,ID;

-(id)initWithName:(NSString *)name phone:(NSString *)phone age:(int)age ID:(int)ID;

+(NSMutableArray *)findAll;
+(int)count;
+(Person *)findByID:(int)ID;
+(NSMutableArray *)findByname:(NSString *)name;
+(void)addName:(NSString *)name  phone:(NSString *)phone age:(int)age;
+(void)deleteByID:(int)ID;
+(void)updataName:(NSString *)name phone:(NSString *)phone age:(int)age forID:(int)ID;
@end
Person類.m文件
#import "Person.h"
#import "DB.h"

@implementation Person
@synthesize name,ID,phone,age;
-(id)initWithName:(NSString *)aName phone:(NSString *)aPhone age:(int)aAge ID:(int)aID
{
    [super init];
   
    if (self)
    {
        self.name = aName;
        self.phone = aPhone;
        self.age = aAge;
        self.ID = aID;
       
    }
    return self;
   
}
-(NSString *)description
{
    return [NSString stringWithFormat:@"id = %d name = %@ phone = %@ age = %d",self.ID,self.name,self.phone,self.age ];
}

+(NSMutableArray *)findAll
{
    sqlite3 *db = [DB openDB];
   
    sqlite3_stmt *stmt = nil;//創建一個聲明對象
   
    int result = sqlite3_prepare_v2(db, "select * from classDB order by ID ", -1, &stmt, nil);
    NSMutableArray *persons = nil;
   
    if (result == SQLITE_OK)
    {
        persons = [[NSMutableArray alloc]init];
        while (sqlite3_step(stmt) == SQLITE_ROW)
        {
            int ID = sqlite3_column_int(stmt, 0);
           
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            const unsigned char *phone = sqlite3_column_text(stmt, 2);
            int age = sqlite3_column_int(stmt, 3);
           
            Person *p = [[Person alloc]initWithName:[NSString stringWithUTF8String:(const char *)name] phone:[NSString stringWithUTF8String:(const char *)phone] age:age ID:ID];
            [persons addObject:p];
            [p release];
        }
    }
    else
    {
        persons = [[NSMutableArray alloc]init];
    }
    sqlite3_finalize(stmt);
    return [persons autorelease];

   
}
+(int)count
{
    sqlite3 *db = [DB openDB];
    sqlite3_stmt *stmt = nil;
    int result = sqlite3_prepare_v2(db, "select count(ID) from classDB", -1, &stmt, nil);
   
    if (result == SQLITE_OK)
    {
        int count = 0;
        if (sqlite3_step(stmt))
        {
            count = sqlite3_column_int(stmt, 0);
        }
        sqlite3_finalize(stmt);
        return count;
    }
    else
    {
        sqlite3_finalize(stmt);
        return 0;
    }
}
+(Person *)findByID:(int)ID
{
    sqlite3 *db = [DB openDB];
    sqlite3_stmt *stmt = nil;
    Person *p = nil;
    int result = sqlite3_prepare_v2(db, "select * from classDB where ID = ?", -1, &stmt, nil);
    if (result == SQLITE_OK)
    {
        sqlite3_bind_int(stmt, 1, ID);
        if (sqlite3_step(stmt))
        {
            int ID = sqlite3_column_int(stmt, 0);
           
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            const unsigned char *phone = sqlite3_column_text(stmt, 2);
            int age = sqlite3_column_int(stmt, 3);
           
            p = [[Person alloc]initWithName:[NSString stringWithUTF8String:(const char *)name] phone:[NSString stringWithUTF8String:(const char *)phone] age:age ID:ID];
           
          

        }
    }
    sqlite3_finalize(stmt);
    return [p autorelease];
   
       
}
+(NSMutableArray *)findByname:(NSString *)name
{
  

    sqlite3 *db = [DB openDB];
    sqlite3_stmt *stmt = nil;
   
    int result = sqlite3_prepare(db, "select * from classDB where name = ?", -1, &stmt, nil);
    NSMutableArray *persons = nil;
    if (result == SQLITE_OK)
    {
        sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);
       
        persons = [[NSMutableArray alloc]init];
        while (sqlite3_step(stmt) == SQLITE_ROW)
        {
            int ID = sqlite3_column_int(stmt, 0);
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            const unsigned char *phone = sqlite3_column_text(stmt, 2);
            int age = sqlite3_column_int(stmt, 3);
           
            Person *p = [[Person alloc]initWithName:[NSString stringWithUTF8String:(const char *)name] phone:[NSString stringWithUTF8String:(const char *)phone] age:age ID:ID];
           
            [persons addObject:p];
            [p release];
           
        }
       
    }
    else
    {
        persons = [[NSMutableArray alloc]init];
    }
    sqlite3_finalize(stmt);
    return  [persons autorelease];
}
//添加元素
+(void)addName:(NSString *)name  phone:(NSString *)phone age:(int)age
{
    NSString *str = [NSString stringWithFormat:@"insert into classDB(name,phone,age) values('%@','%@',%d)",name,phone,age];
   
    sqlite3 *db = [DB openDB];
    sqlite3_stmt *stmt = nil;
   
    int result = sqlite3_prepare_v2(db, [str UTF8String],-1 ,&stmt , nil);
    if (result == SQLITE_OK)
    {
        sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);
   
      
   
}
//根據ID刪除信息
+(void)deleteByID:(int)ID
{
    NSString *str = [NSString stringWithFormat:@"delete from classDB where ID = %d",ID];
    sqlite3 *db = [DB openDB];
    sqlite3_stmt *stmt = nil;
   
    int result = sqlite3_prepare_v2(db, [str UTF8String], -1, &stmt, nil);
   
    if (result == SQLITE_OK)
    {
        sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);
}
//更新
+(void)updataName:(NSString *)name phone:(NSString *)phone age:(int)age forID:(int)ID
{
    NSString *str = [NSString stringWithFormat:@"update classDB set name = '%@',phone = '%@',age = %d where ID = %d",name,phone,age,ID];
    sqlite3 *db = [DB openDB];
    sqlite3_stmt *stmt = nil;
   
    int result = sqlite3_prepare_v2(db, [str UTF8String], -1, &stmt, nil);
   
    if (result == SQLITE_OK)
    {
        sqlite3_step(stmt);
       
    }
    sqlite3_finalize(stmt);
   
}
@end

 

 

 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *