LoadData.h
@interface LoadData : NSObject
{
sqlite3 *DB;
}
//单例方法,懒加载
+(instancetype)shardData;
//初始化数据库
-(void)initData;
//创建数据库表格
-(void)createData;
//关闭数据库
-(void)closeData;
//增加数据库
-(void)addData:(ClassRoom *)theData;
//删除数据库
-(void)deleteData:(NSInteger)theID;
//修改数据库
-(void)changeData:(ClassRoom *)theData;
//查询数据库
-(NSMutableArray *)dataArray;
LoadData.m
#import "LoadData.h"
static LoadData *ID = nil;
@implementation LoadData
//单例方法,懒加载
+(instancetype)shardData
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
ID = [[LoadData alloc]init];
});
return ID;
}
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
if (!ID)
{
ID = [super allocWithZone:zone];
}
return ID;
}
-(id)copy
{
return self;
}
-(id)mutableCopy
{
return self;
}
//初始化数据库
-(void)initData
{
//创建Doc文件
NSString *strPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *strName = [strPath stringByAppendingString:@"/1509E.db"];
if (sqlite3_open([strName UTF8String], &DB) == SQLITE_OK)
{
NSLog(@"打开成功");
[self createData];
}
else
{
NSLog(@"打开失败");
}
}
//创建数据库表格
-(void)createData
{
const char *sql = "create table if not exists classroom(intTeger integer primary key,name text,age text)";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(DB, sql, -1, &stmt, nil);
if (sqlite3_step(stmt) == SQLITE_DONE)
{
NSLog(@"表格创建成功");
}
else
{
NSLog(@"表格创建失败");
}
}
//关闭数据库
-(void)closeData
{
sqlite3_close(DB);
}
//增加数据库
-(void)addData:(ClassRoom *)theData
{
const char *sql = "insert into classroom values(null,?,?)";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(DB, sql, -1, &stmt, nil);
sqlite3_bind_text(stmt, 1, [theData.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [theData.age UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
}
//删除数据库
-(void)deleteData:(NSInteger)theID
{
const char *sql = "delete from classroom where intTeger = ?";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(DB, sql, -1, &stmt, nil);
sqlite3_bind_int(stmt, 1, (int)theID);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
}
//修改数据库
-(void)changeData:(ClassRoom *)theData
{
const char *sql = "update classroom set name = ?,age = ? where intTeger = ?";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(DB, sql, -1, &stmt, nil);
sqlite3_bind_text(stmt, 1, [theData.name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [theData.age UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(stmt, 3, (int)theData.integer);
//执行预编译指针
sqlite3_step(stmt);
//销毁预编译指针
sqlite3_finalize(stmt);
}
//查询数据库
-(NSMutableArray *)dataArray
{
const char *sql = "select *from classroom";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(DB, sql, -1, &stmt, nil);
NSMutableArray *arr = [[NSMutableArray alloc]init];
while (sqlite3_step(stmt) == SQLITE_ROW)
{
ClassRoom *room = [[ClassRoom alloc]init];
room.integer = sqlite3_column_int(stmt, 0);
room.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
room.age = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
[arr addObject:room];
}
sqlite3_finalize(stmt);
return arr;
}
ClassRoom.h
@property(nonatomic,assign)NSInteger integer;
@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)NSString *age;
ViewText.h
@property(nonatomic,strong)UITextField *nameTF;
@property(nonatomic,strong)UITextField *ageTF;
ViewText.m
-(instancetype)initWithFrame:(CGRect)frame
{
if (self == [super initWithFrame:frame])
{
[self addSubview:self.nameTF];
[self addSubview:self.ageTF];
}
return self;
}
-(UITextField *)nameTF
{
if (!_nameTF)
{
_nameTF = [[UITextField alloc]initWithFrame:CGRectMake(30, 100, 200, 64)];
_nameTF.placeholder = @"请输入用户名";
_nameTF.borderStyle = UITextBorderStyleRoundedRect;
}
return _nameTF;
}
-(UITextField *)ageTF
{
if (!_ageTF)
{
_ageTF = [[UITextField alloc]initWithFrame:CGRectMake(30, 160, 200, 44)];
_ageTF.placeholder = @"请输入年龄";
_ageTF.borderStyle = UITextBorderStyleRoundedRect;
_ageTF.keyboardType = UIKeyboardTypePhonePad;
}
return _ageTF;
}
ViewController.m
@interface ViewController ()
{
NSMutableArray *array;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(clickrightBtn)];
self.tableView.rowHeight = 70;
}
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[[LoadData shardData]initData];
[[LoadData shardData]deleteData:[array[indexPath.row]integer]];
[[LoadData shardData]closeData];
[array removeObject:array[indexPath.row]];
[self.tableView reloadData];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return array.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *res = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:res];
if (!cell)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:res];
}
ClassRoom *room = array[indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"%ld\n%@\n%@",room.integer,room.name,room.age];
cell.textLabel.numberOfLines = 0;
return cell;
}
-(void)viewWillAppear:(BOOL)animated
{
[[LoadData shardData]initData];
array = [[LoadData shardData]dataArray];
[[LoadData shardData]closeData];
[self.tableView reloadData];
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SecViewController *sec = [[SecViewController alloc]init];
sec.theroom = array[indexPath.row];
[self.navigationController pushViewController:sec animated:YES];
}
-(void)clickrightBtn
{
SecViewController *sec = [[SecViewController alloc]init];
[self.navigationController pushViewController:sec animated:YES];
}
SecViewController.h
@property(nonatomic,strong)ClassRoom *theroom;
SecViewController.m
@interface SecViewController ()
{
ViewText *MyView;
}
@end
@implementation SecViewController
- (void)viewDidLoad {
[super viewDidLoad];
MyView = [[ViewText alloc]initWithFrame:self.view.frame];
MyView.backgroundColor = [UIColor whiteColor];
self.view = MyView;
MyView.nameTF.text = self.theroom.name;
MyView.ageTF.text = self.theroom.age;
if (MyView.nameTF.text.length<=0)
{
UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(rightBtnClick)];
self.navigationItem.rightBarButtonItem = rightBtn;
}
else
{
UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(rightBtnClick2)];
self.navigationItem.rightBarButtonItem = rightBtn;
}
}
-(void)rightBtnClick2
{
self.theroom.name = MyView.nameTF.text;
self.theroom.age = MyView.ageTF.text;
[[LoadData shardData]initData];
[[LoadData shardData]changeData:self.theroom];
[[LoadData shardData]closeData];
[self.navigationController popViewControllerAnimated:YES];
}
-(void)viewWillAppear:(BOOL)animated
{
[[LoadData shardData]initData];
[[LoadData shardData]dataArray];
}
-(void)rightBtnClick
{
ClassRoom *room = [ClassRoom new];
room.name = MyView.nameTF.text;
room.age = MyView.ageTF.text;
[[LoadData shardData]initData];
[[LoadData shardData]addData:room];
[[LoadData shardData]closeData];;
[self.navigationController popViewControllerAnimated:YES];
}