MST

星途 面试题库

面试题:SQLite在iOS开发中如何为数据库数据创建类

在iOS开发使用SQLite时,描述一下为数据库表中的数据创建类的一般步骤,包括如何映射数据库字段到类的属性,以及如何处理数据类型的转换。
41.0万 热度难度
数据库SQLite

知识考点

AI 面试

面试题答案

一键面试
  1. 创建类
    • 使用Objective - C或Swift创建一个类,该类将对应数据库表中的记录。例如,在Swift中:
    class User {
        var id: Int?
        var name: String?
        var age: Int?
    }
    
    • 在Objective - C中:
    @interface User : NSObject
    @property (nonatomic, assign) NSInteger id;
    @property (nonatomic, strong) NSString *name;
    @property (nonatomic, assign) NSInteger age;
    @end
    
  2. 映射数据库字段到类属性
    • 手动映射
      • 在从数据库读取数据时,将查询结果的列名与类的属性进行对应。例如,在Swift中使用FMDB框架读取数据:
      let query = "SELECT id, name, age FROM users"
      if let results = database.executeQuery(query, withArgumentsIn: nil) {
          while results.next() {
              let user = User()
              user.id = results.int(forColumn: "id")
              user.name = results.string(forColumn: "name")
              user.age = results.int(forColumn: "age")
              // 添加到数组或进行其他操作
          }
      }
      
      • 在Objective - C中:
      NSString *query = @"SELECT id, name, age FROM users";
      FMResultSet *results = [database executeQuery:query];
      while ([results next]) {
          User *user = [[User alloc] init];
          user.id = [results intForColumn:@"id"];
          user.name = [results stringForColumn:@"name"];
          user.age = [results intForColumn:@"age"];
          // 添加到数组或进行其他操作
      }
      
    • 使用ORM(对象关系映射)框架
      • 例如使用Core Data,它提供了更高级的方式来管理对象与数据库的映射。通过创建数据模型(.xcdatamodeld文件),定义实体(对应数据库表)和属性(对应数据库字段)。然后Core Data会自动处理对象与数据库之间的转换。
  3. 处理数据类型转换
    • 基本数据类型
      • SQLite中的INTEGER类型在Swift中可以映射为Int,在Objective - C中映射为NSInteger。例如:
      let intValue = results.int(forColumn: "int_column")
      
      NSInteger intValue = [results intForColumn:@"int_column"];
      
    • 文本类型
      • SQLite的TEXT类型在Swift中映射为String,在Objective - C中映射为NSString。如:
      let stringValue = results.string(forColumn: "text_column")
      
      NSString *stringValue = [results stringForColumn:@"text_column"];
      
    • 日期类型
      • SQLite本身没有专门的日期类型,通常存储为TEXT格式(如YYYY - MM - DD)。在Swift中,可以使用DateFormatter将其转换为Date类型:
      let dateFormatter = DateFormatter()
      dateFormatter.dateFormat = "YYYY - MM - DD"
      if let dateString = results.string(forColumn: "date_column"),
         let date = dateFormatter.date(from: dateString) {
          // 使用date
      }
      
      • 在Objective - C中:
      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      [dateFormatter setDateFormat:@"YYYY - MM - DD"];
      NSString *dateString = [results stringForColumn:@"date_column"];
      NSDate *date = [dateFormatter dateFromString:dateString];
      // 使用date
      
    • 浮点类型
      • SQLite的REAL类型在Swift中映射为Double,在Objective - C中映射为double。例如:
      let doubleValue = results.double(forColumn: "real_column")
      
      double doubleValue = [results doubleForColumn:@"real_column"];