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);