导入依赖库 随时关闭数据库
1..创建业务处理层类
2..创建一个单例类
3..创建sqlite表格方法
4..打开数据库
5..增加数据方法
6..删除方法
7..查询数据
8..关闭数据库
{
// 定义指针
sqlite3 *sqliteDB;
}
// 单例
+(instancetype)sharedData;
// 创建表
-(void)createData;
// 打开数据库
-(void)openData;
// 增加数据
-(void)insertData:(Car *)car;
// 删除数据
-(void)deleteData:(Car *)car;
// 查找数据
-(NSArray *)seleteData;
// 关闭数据库
-(void)closeData;
---------------------- 实现业务处理方法 ---------------------
#import "Data.h"
// 静态标示符
static Data *data=nil;
@implementation Data
// 单例
+(instancetype)sharedData
{
if (!data)
{
data=[[Data alloc] init];
}
return data;
}
+(instancetype)allocWithZone:(struct _NSZone *)zone
{
if (!data)
{
data = [super allocWithZone:zone];
}
return data;
}
// 打开数据库
-(void)openData
{
NSString *str = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [str stringByAppendingPathComponent:@"car.db"];
// 打开
if (sqlite3_open([path UTF8String], &sqliteDB) == SQLITE_OK)
{
NSLog(@"open success!");
// 创建表格
[self createData];
}
else
{
NSLog(@"open fail!");
}
}
// 创建表
-(void)createData
{
// 创建sql语句
const char *sql="create table if not exists car (CarID integer primary key,Name text,Brand text)";
// 创建预编译指针
sqlite3_stmt *stmt;
// 准备预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
// 执行预编译指针
if (sqlite3_step(stmt) == SQLITE_DONE)
{
NSLog(@"create table ok!");
}
else
{
NSLog(@"create tablefail!");
}
// 销毁预编译指针
sqlite3_finalize(stmt);
}
// 增加数据
-(void)insertData:(Car *)car
{
// 创建sql语句
const char *sql = "insert into car values (null,?,?) ";
// 创建预编译指针
sqlite3_stmt *stmt;
// 准备预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
// 解决占位符
sqlite3_bind_text(stmt, 1, [car.Name UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, [car.Brand UTF8String], -1, SQLITE_TRANSIENT);
// 执行预编译指针
if (sqlite3_step(stmt) == SQLITE_DONE)
{
NSLog(@"insert ok!");
}
else
{
NSLog(@"insrt fail!");
}
// 销毁预编译指针
sqlite3_finalize(stmt);
}
// 删除数据
-(void)deleteData:(Car *)car
{
// 创建sql语句
const char *sql = "delete from car where CarID = ?";
// 创建预编译指针
sqlite3_stmt *stmt;
// 准备预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
// 解决占位符
sqlite3_bind_int(stmt, 1, (int) car.CarID);
// 执行预编译指针
if (sqlite3_step(stmt) == SQLITE_DONE)
{
NSLog(@"delete ok!");
}
else
{
NSLog(@"delete fail!");
}
// 销毁预编译指针
sqlite3_finalize(stmt);
}
// 查找数据
-(NSArray *)seleteData
{
// 创建sql语句
const char *sql = "select * from car";
// 创建预编译指针
sqlite3_stmt *stmt;
// 准备预编译指针
sqlite3_prepare_v2(sqliteDB, sql, -1, &stmt, nil);
// 创建空数组
NSMutableArray *arr = [NSMutableArray array];
// 执行预编译指针
while (sqlite3_step(stmt) == SQLITE_ROW)
{
Car *car = [[Car alloc] init];
car.Name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
car.Brand = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
car.CarID = sqlite3_column_int(stmt, 0);
[arr addObject:car];
}
// 销毁预编译指针
sqlite3_finalize(stmt);
return [NSArray arrayWithArray:arr];
}
// 关闭数据库
-(void)closeData
{
sqlite3_close(sqliteDB);
}
---------------------- 查询数据还有删除方法 ------------------
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 打开数据库
[[Data sharedData] openData];
// 查询数据
arr = [[Data sharedData] seleteData];
// 关闭数据库
[[Data sharedData] closeData];
// 刷新表格
[self.table reloadData];
}
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
// 打开数据库(1.业务处理类类名 2.单例名 3.打开数据库方法名)
[[Data sharedData] openData];
// 删除(删除数组里的数据)
[[Data sharedData] deleteData:arr[indexPath.row]];
// 查询
arr = [[Data sharedData] seleteData];
// 关闭
[[Data sharedData] closeData];
// 刷新表格
[self.table reloadData];
}