面试题答案
一键面试-
步骤:
- 导入SQLite框架:在iOS项目中,首先要确保导入了SQLite相关的框架,在Objective - C项目中可以通过
#import <sqlite3.h>
导入,在Swift项目中可以通过桥接文件导入。 - 打开数据库:使用
sqlite3_open
函数打开SQLite数据库文件,如果文件不存在则会创建。 - 编写创建表的SQL语句:在SQL语句中定义学生表的字段,并且使用
FOREIGN KEY
关键字来设置外键约束,关联班级表。 - 执行SQL语句:使用
sqlite3_exec
或相关的函数执行创建表的SQL语句。 - 关闭数据库:使用
sqlite3_close
函数关闭数据库连接。
- 导入SQLite框架:在iOS项目中,首先要确保导入了SQLite相关的框架,在Objective - C项目中可以通过
-
Objective - C代码示例:
#import <sqlite3.h>
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
sqlite3 *db;
const char *databasePath = "/Users/yourusername/yourdatabase.db";
if (sqlite3_open(databasePath, &db) == SQLITE_OK) {
const char *createTableSQL = "CREATE TABLE IF NOT EXISTS classes (id INTEGER PRIMARY KEY AUTOINCREMENT, class_name TEXT);";
sqlite3_exec(db, createTableSQL, NULL, NULL, NULL);
const char *createStudentTableSQL = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, student_name TEXT, class_id INTEGER, FOREIGN KEY(class_id) REFERENCES classes(id));";
sqlite3_exec(db, createStudentTableSQL, NULL, NULL, NULL);
sqlite3_close(db);
} else {
NSLog(@"Failed to open database");
}
}
return 0;
}
- Swift代码示例:
import Foundation
import SQLite3
let databasePath = "/Users/yourusername/yourdatabase.db"
var db: OpaquePointer? = nil
if sqlite3_open(databasePath, &db) == SQLITE_OK {
let createClassesTableSQL = "CREATE TABLE IF NOT EXISTS classes (id INTEGER PRIMARY KEY AUTOINCREMENT, class_name TEXT);"
var createTableStatement: OpaquePointer? = nil
if sqlite3_prepare_v2(db, createClassesTableSQL, -1, &createTableStatement, nil) == SQLITE_OK {
if sqlite3_step(createTableStatement) != SQLITE_DONE {
print("Failed to create classes table")
}
}
sqlite3_finalize(createTableStatement)
let createStudentTableSQL = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, student_name TEXT, class_id INTEGER, FOREIGN KEY(class_id) REFERENCES classes(id));";
if sqlite3_prepare_v2(db, createStudentTableSQL, -1, &createTableStatement, nil) == SQLITE_OK {
if sqlite3_step(createTableStatement) != SQLITE_DONE {
print("Failed to create students table")
}
}
sqlite3_finalize(createTableStatement)
sqlite3_close(db)
} else {
print("Failed to open database")
}
在实际iOS开发中,路径应该是应用程序沙盒内的路径,这里为了示例简单使用了自定义路径。同时,SQLite外键约束默认是关闭的,在创建表之前需要开启外键约束,Objective - C中可以在打开数据库后执行PRAGMA foreign_keys = ON;
,Swift中类似,如下:
- Objective - C开启外键约束:
if (sqlite3_open(databasePath, &db) == SQLITE_OK) {
const char *pragmaSQL = "PRAGMA foreign_keys = ON;";
sqlite3_exec(db, pragmaSQL, NULL, NULL, NULL);
// 创建表的代码
}
- Swift开启外键约束:
if sqlite3_open(databasePath, &db) == SQLITE_OK {
let pragmaSQL = "PRAGMA foreign_keys = ON;"
var pragmaStatement: OpaquePointer? = nil
if sqlite3_prepare_v2(db, pragmaSQL, -1, &pragmaStatement, nil) == SQLITE_OK {
if sqlite3_step(pragmaStatement) != SQLITE_DONE {
print("Failed to enable foreign keys")
}
}
sqlite3_finalize(pragmaStatement)
// 创建表的代码
}