UI进阶之数据管理及SQL语句


创建DataBaseHandle继承NSObject

在DataBaseHandle.h中编写方法

+ (DataBaseHandle *)sharedDataBaswHandle;

//打开数据库

- (void)openDB;


//关闭数据库;

- (void)closeDB;


//创建表

- (void)createTable;


//插入一条数据

- (void)insertName:(NSString *)name

gender:(NSString *)gender

age:(NSInteger)age;


//通过UID更新一个数据

-(void)updataWithUID:(NSInteger )uid;


//通过UID删除一个数据

-(void)deleteWithUID:(NSInteger)uid;


//搜索全部

-(void)searchAll;


//根据name查询一条数据

-(void)seaechWithName:(NSString *)name;


在DataBaseHandle.m中


@interface DataBaseHandle()

//sqlite的头文件#import@interface DataBaseHandle()

//documents文件夹下的一个叫做person.sqlite;

@property (nonatomic,copy) NSString *dbPath;

@end


static DataBaseHandle *dataBase = nil;

+ (DataBaseHandle *)sharedDataBaswHandle{

if (dataBase == nil) {

dataBase = [[DataBaseHandle alloc]init];

}

return dataBase;

}


//懒加载:重写了属性的getter方法

- (NSString *) dbPath{

if (_dbPath == nil) {

NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];

_dbPath = [document stringByAppendingPathComponent:@"person.sqlite"];

}

return _dbPath;

}


//初始化一个数据库

static sqlite3 *db = nil;


//打开数据库

- (void)openDB{

//打开数据库函数

//在数据库里面 所有的字符串都要变成utf-8的编码格式


int result = sqlite3_open(self.dbPath.UTF8String, &db);

if (result == SQLITE_OK) {

NSLog(@"打开成功");

}else{

NSLog(@"打开失败");

}

}


//关闭数据库;

- (void)closeDB{

int result = sqlite3_close(db);

if (result == SQLITE_OK) {

NSLog(@"关闭成功");

}else{

NSLog(@"关闭失败");

}

}


//创建表


- (void)createTable{

//创建一个person表 要求字段 UID integer  主键 自增 name text,  gender text, age integer

NSString *createString = @"create table if not exists person (uid integer primary key autoincrement not null, name text, gender text, age integer)";

//第一个参数: 数据库

//第二个参数: sql语句.要使用utf-8的格式

//第三个参数: 结果的回调函数

//第四个参数: 回调函数的参数

//第五个参数: 错误信息

int result = sqlite3_exec(db, createString.UTF8String, NULL, NULL, NULL);

//判断是否创建成功

if (result == SQLITE_OK ) {

NSLog(@"创建成功");

}else{

NSLog(@"创建不成功");

NSLog(@"%d",result);

}

//打印数据库地址

NSLog(@"_dbpath == %@",_dbPath);

}


//插入一条数据


- (void) insertName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age{

//插入数据的sql语句,数据不确定,所以在value里面使用 ? 代替,之后向里面绑定

NSString *insertString = @"insert into person (name, gender, age) values (?, ?, ?)";

//sqlite的伴随指针

sqlite3_stmt *stmt = nil;

//预执行sql语句

//第一个参数: 数据库

//第二个参数: sql语句

//第三个参数: 如果为正, 例如 :1 表示再去参数的时候,只取一个字节;使用负数表示取值取到碰到结束符号('\000','u000'),

//第四个参数: 伴随指针.会伴随着数据库的操作,获取值或者绑定值

//第五个参数: 取值的时候如果取得不全,那么剩下的都存在这里面

int result = sqlite3_prepare(db, insertString.UTF8String, -1, &stmt, NULL);


//如果预执行成功的话,那么就要往里面放数据了

if (result == SQLITE_OK) {

//向预执行的sql语句里面插入参数 (取代 '?'的位置)

//第一个参数 :伴随着指针

//第二个参数: '?'的位置,从1开始

//第三个参数: 插入的数据

//第四个参数: 和上面的-1是一样的

//第五个参数: 回调函数

sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);

sqlite3_bind_text(stmt, 2, gender.UTF8String, -1, NULL);

sqlite3_bind_int64(stmt, 3, age);

//sql语句已经全了

//执行伴随指针,如果为SQLITE_DONE代表执行成功,并且成功的插入数据

if (sqlite3_step(stmt) == SQLITE_DONE) {

NSLog(@"插入成功");

}

}

//一定要记得释放掉伴随指针

sqlite3_finalize(stmt);

}


//更新数据


- (void)updataWithUID:(NSInteger)uid{

NSString *updateString = @"update person set name = '扫军' where uid = ?";


//伴随指针

sqlite3_stmt *stmt = nil;

int result = sqlite3_prepare(db, updateString.UTF8String, -1, &stmt, NULL);


if (result == SQLITE_OK) {

sqlite3_bind_int64(stmt, 1, uid);

if (sqlite3_step(stmt) == SQLITE_DONE) {

NSLog(@"修改成功");

}else{

NSLog(@"修改失败");

}

}

sqlite3_finalize(stmt);

}


//删除简单的操作方式

- (void)deleteWithUID:(NSInteger)uid{

NSString *deleyaString = [NSString stringWithFormat:@"delete from person where uid = %ld",uid];


int result = sqlite3_exec(db, deleyaString.UTF8String, NULL, NULL, NULL);

if (result == SQLITE_OK) {

NSLog(@"删除成功");

}else{

NSLog(@"删除失败");

}

}


//查找


- (void)searchAll{

NSString *searchString = @"select * from person";

sqlite3_stmt *stmt = nil;


int result = sqlite3_prepare(db, searchString.UTF8String, -1, &stmt, NULL);

if (result == SQLITE_OK) {


//sqlite3_step(stmt) == SQLITE_ROW  的时候,代表还有下一条数据


while (sqlite3_step(stmt) == SQLITE_ROW) {


//第二个参数: 表示参数的位置 , 从0 开始

int uid = sqlite3_column_int(stmt, 0);

NSLog(@"%d",uid);


NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];

NSLog( @"%@",name);

NSString *gender = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 2)];

NSLog(@"%@",gender);

int age = sqlite3_column_int(stmt, 3);

NSLog(@"%d",age);

}

}

sqlite3_finalize(stmt);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容