数据库篇——学生基本信息录入系统

学生基本信息录入系统

一.搭建主界面

  • 在storyboard中搭建主界面
    在这里插入图片描述
  • 给主界面添加导航栏控制器用来推送界面
    在这里插入图片描述
  • 关联对象
    在这里插入图片描述
  • 关联事件
    在这里插入图片描述

二.封装关于文件的操作类(SqliteOperation)

在这里插入图片描述

  • 单例,管理当前这个类的一个对象 让这个对象一直存在
+ (SqliteOperation *)sharedOperaion;
static SqliteOperation *instance = nil;

@implementation SqliteOperation

+ (SqliteOperation *)sharedOperaion{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [SqliteOperation new];
    });
    return instance;
}

@end
  • 打开一个数据库,如果可以打开则创建表
- (BOOL)openSql;
- (BOOL)openSql{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"stu.sql"];
    NSLog(@"%@",path);
    if (sqlite3_open([path UTF8String], &_sql) == SQLITE_OK) {
        NSLog(@"打开数据库成功");
        //创建表
        NSString *createTableSql = @"create table if not exists stu(id integer primary key autoincrement, name text, age text, icon blob)";
        return [self executeSql:createTableSql];
    }else{
        return NO;
    }
}

//创建表的执行语句
- (BOOL)executeSql:(NSString *)sql{
    if(sqlite3_exec(_sql, sql.UTF8String, NULL, NULL, NULL) == SQLITE_OK){
        NSLog(@"执行语句成功:%@",sql);
        return YES;
    }else{
        NSLog(@"执行语句失败:%@",sql);
        return NO;
    }
}
  • 要把数据保存起来,先将学生的所有信息都封装成一个模型
    在这里插入图片描述
@interface StudentModel : NSObject

/** 图片 */
@property(nonatomic, strong) UIImage *icon;
/** 姓名 */
@property(nonatomic, strong) NSString *name;
/** 年龄 */
@property(nonatomic, assign) NSString *age;

@end
  • 写一个函数用来保存学生model,将model中的信息存入数据库中
- (void)save:(StudentModel *)model{
    NSString *insertSql = @"insert into stu(name,age,icon) values(?,?,?)";
    
    sqlite3_stmt *stmt = NULL;
    if(sqlite3_prepare(_sql, insertSql.UTF8String, -1, &stmt, NULL) != SQLITE_OK){
        NSLog(@"预处理失败");
        return;
    }
    
    NSData *data = UIImagePNGRepresentation(model.icon);
    
    sqlite3_bind_text(stmt, 1, model.name.UTF8String, -1, NULL);
    sqlite3_bind_text(stmt, 2, model.age.UTF8String, -1, NULL);
    sqlite3_bind_blob(stmt, 3, data.bytes, (int)data.length, NULL);
    
    sqlite3_step(stmt);
    
    sqlite3_finalize(stmt);
}
  • 写一个加载函数用来读取数据库中的学生信息用来显示到cell上,这个函数返回一个模型数组
@property (nonatomic, strong) NSMutableArray *dataArray;
- (NSMutableArray *)dataArray{
    if (_dataArray == nil) {
        self.dataArray = [NSMutableArray array];
    }
    return _dataArray;
}
- (NSArray *)loadData{
    NSString *selectSql = [NSString stringWithFormat:@"select * from stu limit %ld,2", self.dataArray.count];
    
    sqlite3_stmt *stmt = NULL;
    if(sqlite3_prepare(_sql, selectSql.UTF8String, -1, &stmt, NULL) != SQLITE_OK){
        return nil;
    }
    
    //id name age icon
    while (sqlite3_step(stmt) == SQLITE_ROW) {
        StudentModel *model = [StudentModel new];
        model.name = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 1) encoding:NSUTF8StringEncoding];
        model.age = [NSString stringWithCString:(const char *)sqlite3_column_text(stmt, 2) encoding:NSUTF8StringEncoding];
        NSData *imageData = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)];
        model.icon = [UIImage imageWithData:imageData];
        
        [self.dataArray addObject:model];
    }
    
    return self.dataArray;
}

三.信息展示类和cell的自定义

1.ViewController类中

  • 设置信息输入框的提示文字
_nameTextField.placeholder = @"Name";
_ageTextFeild.placeholder = @"Age";
  • 点击+按钮完成从系统中读取一张照片的功能
    在这里插入图片描述
  • 服从UIImagePickerController的代理
@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
  • 实现两个代理方法
    在这里插入图片描述
  • 点击submit按钮,将数据封装成模型再将模型数据保存到数据库
    在这里插入图片描述
  • 点击show按钮,进入展示界面,展示数据库中的学生信息
    在这里插入图片描述

2.ShowViewController类(继承于UIViewController)

  • 定义一个tableview属性变量
@property(nonatomic, strong) UITableView *tableView;

在这里插入图片描述

  • 服从代理协议
@interface ShowViewController ()<UITableViewDataSource,UITableViewDelegate>
  • 用一个数据接收从数据库中读取的模型数据
@property(nonatomic, strong) NSArray *dataArray;
  • 下拉刷新,从数据库读取模型数据
    在这里插入图片描述
  • 实现代理方法
    在这里插入图片描述

3.自定义cell,ShowTableViewCell类(继承于UITableViewCell)

  • xib自定义如下
    在这里插入图片描述
  • 关联类
    在这里插入图片描述
  • 设置cellID
    在这里插入图片描述
  • 关联对象
    在这里插入图片描述
  • .h文件中添加一个成员属性变量model
    在这里插入图片描述
  • 设置model的值
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页