• SQLite 基本使用


    - (void)viewDidLoad

    {

        [super viewDidLoad];

        [self openDB];

        

        [self select];

    }

    #pragma mark 打开数据库

    - (void)openDB

    {

        NSString *dbPath = [@"17houses.db" appendDocumentDir];

    //    判断数据库文件是否在document目录,如果不在的话就拷贝过去

        if (![[NSFileManager defaultManager] fileExistsAtPath:kDBName isDirectory:NO]) {

            NSString *dbsource=[[NSBundle mainBundle]pathForResource:kDBName ofType:nil];

            NSError *pathErr;

            [[NSFileManager defaultManager]copyItemAtPath:dbsource toPath:dbPath error:&pathErr];

            if (pathErr!=nil) {

                

                NSAssert(pathErr!=nil, @"数据库拷贝发生错误%@",pathErr.localizedDescription);

            }

        }

        _db = NULL;

        if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {

            NSLog(@"数据库打开成功");

        } else {

            NSLog(@"数据库打开失败");

        }

    }

    #pragma mark 单步执行SQL

    - (void)execSQL:(NSString *)sql message:(NSString *)message

    {

        char *errmsg = NULL;

        if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {

            NSLog(@"%@成功!", message);

        } else {

            // C语言中字符串输出应该用%s

            NSLog(@"%@失败 - %s", message, errmsg);

        }

    }

    #pragma mark - 使用SQL查询菜谱结果集

    - (NSArray *)select

    {

        NSString *sql = @"SELECT _id, subitem FROM userdata WHERE _id = 4";

        

        // 1. 查询语句通常是使用字符串拼接出来的

        // 因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!

        sqlite3_stmt *stmt = NULL;

        

        NSMutableArray *List = nil;

        

        if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {

            NSLog(@"语法正确");

            

            List = [NSMutableArray array];

            

            // 利用句柄,逐一查询符合条件的数据

            // sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置

            while (SQLITE_ROW == sqlite3_step(stmt)) {

                // 取到行信息,逐一获取每一列的内容

                // iCol对应的就是SQL语句中字段的顺序,从0开始

                // 根据实际查询字段的属性,使用sqlite3_column_xxx取得对应的内容即可

                int ID = sqlite3_column_int(stmt, 0);

                const unsigned char *name = sqlite3_column_text(stmt, 1);

                

                // const unsigned char *直接输出看不出结果,需要转换

                NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];

                

                model *m = [model modelWithID:ID subitem:nameUTF8];

                

                [List addObject:m];

            }

            

        } else {

            NSLog(@"语法错误");

        }

        

        return List;

    1. }
  • 相关阅读:
    代码生成器
    怎样成为优秀的软件模型设计者[转]
    2010年部分节假日安排的通知
    Web开发工具整理
    JS模版
    Timer_MinBytesPerSecond,Timer_ConnectionIdle解决办法
    [原]Asp.Net提交后,刷新时事件触发问题解决
    [转]JS日期选择控件
    知道了sa密码,控制服务器
    调试
  • 原文地址:https://www.cnblogs.com/airy99/p/3727356.html
Copyright © 2020-2023  润新知