zoukankan      html  css  js  c++  java
  • [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);

    ___________________________________________________
    专注iOS/前端开发,广泛涉猎多种平台和技术,欢迎交流
    可以在微博关注并@沈z伟
  • 相关阅读:
    个人作业week7——前端开发感想总结
    C#【结对编程作业】小学数学习题助手
    【个人作业3】必应词典案例分析
    【个人博客作业II】有关代码规范问题的讨论
    【个人博客作业II】代码复审结果
    【补充】第一次个人项目出现的bug
    《构建之法》阅读反馈
    【个人项目总结】C#四则运算表达式生成程序
    软件工程驻足篇章:第十七周和BugPhobia团队漫长的道别
    软件工程反思篇章:第七周和进阶团队项目感想反思
  • 原文地址:https://www.cnblogs.com/rayshen/p/3961204.html
Copyright © 2011-2022 走看看