[IOS SQLITE的使用方式]

1.把数据库文件localdata.db放入工程,并建立bundle(在build phases里)

2.创建新的类,用于本地SQLite查询. LocalDB.m(.h就不说了,保证每个.m里要外部调用的函数都在.h里做好接口就好)

3.LocalDB.m: createDB函数

因为工程里的Bundle文件无法直接使用(只能直接使用document里的文件),所以第一次使用sqlite文件要把它复制到document文件夹。

-(void)createDB{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //该方法可用来显示DOCUMENT文件夹内的文件信息
    NSString *documents = [paths objectAtIndex:0];
    
    database_path = [documents stringByAppendingPathComponent:DBNAME];//获取数据库文件的地址,不存在就会创建
    NSLog(@"数据库地址是:%@",database_path);

    //根据上面拼接好的路径 dbFilePath ,利用NSFileManager 类的对象的fileExistsAtPath方法来检测是否存在,返回一个BOOL值
    //1. 创建NSFileManager对象  NSFileManager包含了文件属性的方法
    NSFileManager *fm = [NSFileManager defaultManager];
    
    //2. 通过 NSFileManager 对象 fm 来判断文件是否存在,存在 返回YES  不存在返回NO
    BOOL isExist = [fm fileExistsAtPath:database_path];
    //NSLog(@"isExist =%d",isExist);

    //如果不存在 isExist = NO,拷贝工程里的数据库到Documents下
    if (!isExist)
    {
        //拷贝数据库
        //获取工程里,数据库的路径,因为我们已在工程中添加了数据库文件,所以我们要从工程里获取路径
        NSString *backupDbPath = [[NSBundle mainBundle]
                                  pathForResource:@"localdata"
                                  ofType:@"db"];
        BOOL cp = [fm copyItemAtPath:backupDbPath toPath:database_path error:nil];
        NSLog(@"找到Bundle文件:%@,已拷贝至Document",backupDbPath);
    }
    
    if (sqlite3_open([database_path UTF8String], &db) != SQLITE_OK) {
        sqlite3_close(db);
        NSLog(@"数据库打开失败");
    }
    
    sqlite3_close(db);

}

4.简单的查询语句(我建立了一个dbversion的table,然后字段为dbversion,值为1.0,用于以后的更新)

这是一个最简单的sqlite的查询语句用法。

-(NSString *)selectdbversion{
    NSString * version;
    
    if (sqlite3_open([self->database_path UTF8String], &db) == SQLITE_OK){
        
        NSString *sqlQuery =@"SELECT dbversion FROM dbversion";
        
        sqlite3_stmt * statement;
        
        if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
            
            while (sqlite3_step(statement) == SQLITE_ROW) {
                
                char *row0 = (char*)sqlite3_column_text(statement, 0);
                version = [[NSString alloc]initWithUTF8String:row0];
            }
        }else
        {
            NSLog( @"Failed from sqlite3_prepare_v2. Error is:  %s", sqlite3_errmsg(db) );
        }
    }
    return version;
}

5.外部调用方式:

实例化localDB对象就可以了。

    LocalDB *newdb=[LocalDB alloc];
    [newdb createDB];
    NSString *version=[newdb selectdbversion];
    NSLog(@"%@",version);

 

posted @ 2014-09-08 11:28  Rayshen  阅读(290)  评论(0编辑  收藏  举报