10. 代码实现DQL查询语句

2016-06-16  本文已影响26人  面糊
  1. 查询语句与之前的几个语句相比较, 是最麻烦的, 因为他要取出每一条数据, 去匹配他的类型, 然后再取出来
    • 本人只尝试了查询所有数据的方法

    • 这里需要注意的是, 匹配数据的时候, 一定要注意字符串的转换, 因为这玩意是纯C语言的东西.....对于一个iOS开发者来说, C真心薄弱的可以....

    • 如果你的数据过多, 建议不要尝试这个方法......因为你遍历的时候基本可以去睡一觉了.....

        // 查询所有数据
        - (void)queryAll {
            
            // 1. 语句
            NSString *sql = @"select * from T_human";
            
            // 2. 创建一个准备语句
            sqlite3 *db = [SQLiteTool shareInstance].db;
            sqlite3_stmt *stmt = nil;
            
            if (sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, nil) != SQLITE_OK) {
                NSLog(@"编译失败");
                return;
            }
            
            // 3. 绑定参数的步骤可以省略
            // 4. 执行
            while (sqlite3_step(stmt) == SQLITE_ROW) {
                // 每遍历一次, 都是取出一行数据出来
                
                // 4.1 确定列数
                NSUInteger count = sqlite3_column_count(stmt);
                
                // 4.2 遍历所有的列
                for (int i = 0; i < count; i++) {
                    // 4.3 取出列名
                    NSString *columnName = [NSString stringWithUTF8String:sqlite3_column_name(stmt, i)];
                    NSLog(@"columnName = %@", columnName);
                    
                    // 4.4 取出这一列对应的值
                    int type = sqlite3_column_type(stmt, i);
                    
                    // 4.5 根据不同的类型, 使用不同的函数, 取出不同的值
                    if (type == SQLITE_INTEGER) {
                        // 取出年龄
                        int age = sqlite3_column_int(stmt, i);
                        NSLog(@"age = %i", age);
                    }
                    
                    if (type == SQLITE_FLOAT) {
                        // 取出身高
                        float height = sqlite3_column_double(stmt, i);
                        NSLog(@"height = %f", height);
                    }
                    
                    if (type == SQLITE_TEXT) {
                        // 取出姓名
                        NSString *name = [NSString stringWithCString:(char *)sqlite3_column_text(stmt, i) encoding:NSUTF8StringEncoding];
                        NSLog(@"nage = %@", name);
                    }
                }
            }
            
            // 5. 重置准备语句可以省略
            
            // 6. 释放资源
            sqlite3_finalize(stmt);
        }
上一篇 下一篇

猜你喜欢

热点阅读