面试题答案
一键面试- 创建类:
- 使用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
- 映射数据库字段到类属性:
- 手动映射:
- 在从数据库读取数据时,将查询结果的列名与类的属性进行对应。例如,在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会自动处理对象与数据库之间的转换。
- 例如使用Core Data,它提供了更高级的方式来管理对象与数据库的映射。通过创建数据模型(
- 手动映射:
- 处理数据类型转换:
- 基本数据类型:
- SQLite中的
INTEGER
类型在Swift中可以映射为Int
,在Objective - C中映射为NSInteger
。例如:
let intValue = results.int(forColumn: "int_column")
NSInteger intValue = [results intForColumn:@"int_column"];
- SQLite中的
- 文本类型:
- SQLite的
TEXT
类型在Swift中映射为String
,在Objective - C中映射为NSString
。如:
let stringValue = results.string(forColumn: "text_column")
NSString *stringValue = [results stringForColumn:@"text_column"];
- SQLite的
- 日期类型:
- 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本身没有专门的日期类型,通常存储为
- 浮点类型:
- SQLite的
REAL
类型在Swift中映射为Double
,在Objective - C中映射为double
。例如:
let doubleValue = results.double(forColumn: "real_column")
double doubleValue = [results doubleForColumn:@"real_column"];
- SQLite的
- 基本数据类型: