IOS----UI,SQL

创建一个类  用于打开数据库,头文件如下:

#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DB : NSObject 
+ (sqlite3 *)openDB;
@end

.m文件如下:

#import "DB.h"

//静态内存区域,存储数据库指针
static sqlite3 *dbPoint = nil;

@implementation DB

+ (sqlite3 *)openDB{
    //如果已经用过数据库,直接返回静态区的指针
    if(dbPoint){
        return dbPoint;
    }
    
    //获得Documents路径,用于存储bundle中的数据库文件
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    path = [NSString stringWithFormat:@"%@/DB",path];
    
    //判断文件是否存在,不存在则拷贝
    if(![[NSFileManager defaultManager] fileExistsAtPath:path]){
        //获得将要拷贝的文件的路径,bundle路径
        NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"DataBase" ofType:@"sqlite"];
        NSError *error = nil;
        [[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:path error:&error];
        if(error){
            NSLog(@"%@",error);
        }
    }
    //创建数据库的指针对象
    sqlite3_open([path UTF8String], &dbPoint);
    return dbPoint;
}

@end

创建类用于写增删改查方法,头文件如下:包括几个简单的增删改查方法:

#import <Foundation/Foundation.h>
#import "NovelModel.h"
@interface NovelDataBase : NSObject
+ (NSArray *)selectAllNovel;//查询所有信息
+ (NovelModel *)selectWithId:(NSInteger)num;//按ID查找信息
+ (void)insertWithModel:(NovelModel *)model;//添加信息
+ (void)updateBookname:(NSString *)bookname withId:(NSInteger)num;//根据ID修改书名
+ (void)deleteWithId:(NSInteger)num;//根据ID删除
@end

.m文件如下:

#import "NovelDataBase.h"
#import "DB.h"
@implementation NovelDataBase

+ (NSArray *)selectAllNovel{
    
    NSMutableArray *results = [NSMutableArray array];

    //获得数据库指针
    sqlite3 *db = [DB openDB];
    //创建一个数据库的替身
    sqlite3_stmt *stmt = nil;//用于存储数据库语句得到的结果
    
    //数据库查询语句
    NSString *sqlStr = [NSString stringWithFormat:@"select nv_id,bookname,author,type,nv_score from Novel"];
    
    //通过SQL语句进行查询并且将查询结果赋值给替身stmt(检验SQL语句是否正确,正确则向替身赋值,否则替身内无值)
    int result = sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &stmt, nil);
    
    //SQLITE_OK==0,不是0进SDK看错误信息
    if(result == SQLITE_OK){
               while (sqlite3_step(stmt) == SQLITE_ROW/*下一行已准备好*/) {
            float nv_id = sqlite3_column_int(stmt, 0/*取sql语句对应列名的顺序*/);
            const unsigned char *nbookname = sqlite3_column_text(stmt, 1);
            const unsigned char *nauthor = sqlite3_column_text(stmt, 2);
            const unsigned char *ntype = sqlite3_column_text(stmt, 3);
            float nv_score = sqlite3_column_double(stmt, 4);
            
            NSString *author = [NSString stringWithUTF8String:(const char *)nauthor];
            NSString *bookname = [NSString stringWithUTF8String:(const char *)nbookname];
            NSString *type = [NSString stringWithUTF8String:(const char *)ntype];
            
            NovelModel *novel = [NovelModel NovelWithId:nv_id bookname:bookname author:author type:type score:nv_score];
            
            [results addObject:novel];
        }
    }
    //干掉替身
    sqlite3_finalize(stmt);
    return results;
}

+ (NovelModel *)selectWithId:(NSInteger)num{
    
    //获得数据库指针
    sqlite3 *db = [DB openDB];
    //创建一个数据库的替身
    sqlite3_stmt *stmt = nil;//用于存储数据库语句得到的结果
    
    //数据库查询语句
    NSString *sqlStr = [NSString stringWithFormat:@"select nv_id,bookname,author,type,nv_score from Novel where nv_id = %d",num];
    
    //通过SQL语句进行查询并且将查询结果赋值给替身stmt(检验SQL语句是否正确,正确则向替身赋值,否则替身内无值)
    int result = sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &stmt, nil);
    
    //SQLITE_OK==0,不是0进SDK看错误信息
    if(result == SQLITE_OK){
        if(sqlite3_step(stmt) == SQLITE_ROW/*下一行已准备好*/) {
            int nv_id = sqlite3_column_int(stmt, 0/*取sql语句对应列名的顺序*/);
            const unsigned char *nbookname = sqlite3_column_text(stmt, 1);
            const unsigned char *nauthor = sqlite3_column_text(stmt, 2);
            const unsigned char *ntype = sqlite3_column_text(stmt, 3);
            float nv_score = sqlite3_column_double(stmt, 4);
            
            NSString *author = [NSString stringWithUTF8String:(const char *)nauthor];
            NSString *bookname = [NSString stringWithUTF8String:(const char *)nbookname];
            NSString *type = [NSString stringWithUTF8String:(const char *)ntype];
            
            NovelModel *novel = [NovelModel NovelWithId:nv_id bookname:bookname author:author type:type score:nv_score];
            //干掉替身
            sqlite3_finalize(stmt);
            return novel;
        }
    }
    return nil;
}

+ (void)insertWithModel:(NovelModel *)model{
    //获得数据库指针
    sqlite3 *db = [DB openDB];
    
    //数据库查询语句
    NSString *sqlStr = [NSString stringWithFormat:@"insert into Novel(nv_id,bookname,author,type,nv_score)values(%d,'%@','%@','%@',%f)",model.nv_id,model.bookname,model.author,model.type,model.nv_score];
    
    //通过SQL语句进行查询并且将查询结果赋值给替身stmt(检验SQL语句是否正确,正确则向替身赋值,否则替身内无值)
    int result = sqlite3_exec(db, [sqlStr UTF8String], NULL, NULL, NULL);
    
    //SQLITE_OK==0,不是0进SDK看错误信息
    if(result == SQLITE_OK){
        NSLog(@"添加成功");
    }
}


+ (void)updateBookname:(NSString *)bookname withId:(NSInteger)num{
    //获得数据库指针
    sqlite3 *db = [DB openDB];
    
    //数据库查询语句
    NSString *sqlStr = [NSString stringWithFormat:@"update Novel set bookname = '%@' where nv_id = %d",bookname,num];
    
    //通过SQL语句进行查询并且将查询结果赋值给替身stmt(检验SQL语句是否正确,正确则向替身赋值,否则替身内无值)
    int result = sqlite3_exec(db, [sqlStr UTF8String], NULL, NULL, NULL);
    
    //SQLITE_OK==0,不是0进SDK看错误信息
    if(result == SQLITE_OK){
        NSLog(@"更新成功");
    }
}

+ (void)deleteWithId:(NSInteger)num{
    //获得数据库指针
    sqlite3 *db = [DB openDB];
    
    //数据库查询语句
    NSString *sqlStr = [NSString stringWithFormat:@"delete from Novel where nv_id = %d",num];
    
    //通过SQL语句进行查询并且将查询结果赋值给替身stmt(检验SQL语句是否正确,正确则向替身赋值,否则替身内无值)
    int result = sqlite3_exec(db, [sqlStr UTF8String], NULL, NULL, NULL);
    
    //SQLITE_OK==0,不是0进SDK看错误信息
    if(result == SQLITE_OK){
        NSLog(@"删除成功");
    }

}

对于数据库的使用,现有一个小说类:

#import <Foundation/Foundation.h>

@interface NovelModel : NSObject

@property(nonatomic,assign) NSInteger nv_id;
@property(nonatomic,retain) NSString *bookname;
@property(nonatomic,retain) NSString *author;
@property(nonatomic,retain) NSString *type;
@property(nonatomic,assign) CGFloat nv_score;

- (id)initWithId:(NSInteger)nid bookname:(NSString *)bookname author:(NSString *)author type:(NSString *)type score:(CGFloat)score;
+ (id)NovelWithId:(NSInteger)nid bookname:(NSString *)bookname author:(NSString *)author type:(NSString *)type score:(CGFloat)score;


@end

#import "NovelModel.h"

@implementation NovelModel

- (void)dealloc{
    [_bookname release];_bookname = nil;
    [_author release];_author = nil;
    [_type release];_type = nil;
    [super dealloc];
}

- (id)initWithId:(NSInteger)nid bookname:(NSString *)bookname author:(NSString *)author type:(NSString *)type score:(CGFloat)score{
    self = [super init];
    if(self){
        self.nv_id = nid;
        self.bookname = bookname;
        self.author = author;
        self.type = type;
        self.nv_score = score;
    }
    return self;
}
+ (id)NovelWithId:(NSInteger)nid bookname:(NSString *)bookname author:(NSString *)author type:(NSString *)type score:(CGFloat)score{
    NovelModel *novel = [[NovelModel alloc]initWithId:nid bookname:bookname author:author type:type score:score];
    return [novel autorelease];
}

- (NSString *)description{
    return [NSString stringWithFormat:@"id==%d  bookname==%@  author==%@  type==%@  score==%f",self.nv_id,self.bookname,self.author,self.type,self.nv_score];
}

@end

函数的调用如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.translucent = NO;
    
    NSArray *array = [NovelDataBase selectAllNovel];
    NSLog(@"%@",[array lastObject]);
    
    NovelModel *novel = [NovelDataBase selectWithId:1];
    NSLog(@"%@",novel);
    
    NovelModel *model = [NovelModel NovelWithId:2 bookname:@"金鳞岂是池中物" author:@"龟仙人" type:@"色情读物" score:100];
    [NovelDataBase insertWithModel:model];

    
    [NovelDataBase updateBookname:@"七龙珠" withId:2];
    
    novel = [NovelDataBase selectWithId:2];
    NSLog(@"%@",novel);
    
    
    [NovelDataBase deleteWithId:2];
    array = [NovelDataBase selectAllNovel];
    NSLog(@"%@",[array lastObject]);
    
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值