iOS中 DataBase SQL数据库 UI

DataBaseHandle.h@class Student;@interface DataBaseHandle : NSObject//创建单例的方法+ (DataBaseHandle *)shareDataBaseHandle;//打开数据库的方法- (void)openDataBase;//关闭数据库的方法- (void)closeDataBase;//插入学生对象的接口- (void)insertStudent : (Student *)student;//返回表格中所有学生的接口- (NSMutableArray *)selectAllStudent;//根据唯一标识学号删除学生- (void)deleteOneStudentByNumber : (NSInteger )number;//根据唯一标识学号修改学生的姓名- (void)updateStudentGender : (NSString *)gender ByNumber : (NSInteger )number;//根据学号查找学生- (Student *)selectOneStudentByNumber : (NSInteger)number;@endDataBaseHandle.m#import "DataBaseHandle.h"#import <sqlite3.h>#import "Student.h"@implementation DataBaseHandlestatic DataBaseHandle *handle = nil;//创建单例的方法+ (DataBaseHandle *)shareDataBaseHandle{@synchronized(self){if (handle == nil) {handle = [[DataBaseHandle alloc]init];//让单例对象一创建后就可以访问数据库[handle openDataBase];}}return handle;}//返回数据库路径- (NSString *)dataBasePath{//将数据库文件放到Documents文件夹下 student.sqlitereturn [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"student.sqlite"];}

定义一个全局且在静态区的数据库指针

static sqlite3 *db = nil;

打开数据库的方法

– (void)openDataBase{//1.先获取数据文件的路径NSString *dbPath = [self dataBasePath];//使用sql之前一定要导入libsqlite3.0动态链接类库,其中libsqlite.3.0是快捷方式,导入快捷方式的好处,当版本更新的时候,不再导入新的实体类库了,因为快捷方式永远指向的是最新的实体类库(记得导入头文件)//2.使用sql语句打开数据库 //[dbPath UTF8String] 将OC字符串转化为C语言字符串//sqlite3 就是数据库指针//创建数据库指针db// sqlite3 *db = nil;//方法执行完,内不会对数据库指针db进行初始化,方法执行完,就会存在数据库文件//此方法会先检测文件路径中有没有对应的数据库文件,,没有则创建,有的话直接打开 int result = sqlite3_open([dbPath UTF8String], &db);//SQLITE_OK 说明sql是成功if (result == SQLITE_OK) {//NSLog(@"数据库打开成功");//创建表格//准备sql语句NSString *sqlString = @"create table if not exists Student(stu_number integer primary key autoincrement,stu_name text,stu_gender text,stu_age integer)";//执行sql语句sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, NULL);}else{NSLog(@"数据库打开失败");}}

关闭数据库的方法

– (void)closeDataBase{int result = sqlite3_close(db);NSLog(@"%@",(result == SQLITE_OK) ? @"关闭成功":@"关闭失败");}

插入学生对象的接口——增

– (void)insertStudent : (Student *)student{//1.打开数据库[self openDataBase];//2.准备插入的sql语句NSString *sqlString = @"insert into Student(stu_name,stu_gender,stu_age)values(?,?,?)";//3.创建数据库管理指针(数据库管理指令集)sqlite3_stmt *stmt = nil;//4.验证sql语句是否正确//参数1:数据库指针,//参数2:sql语句//参数3:sql语句的长度写成-1,自动计算sql语句的最大长度,否则要自己计算长度//参数4:sql语句的管理指针//参数5:预留参数,未来使用//5.拿验证的结果,判断是否执行参数绑定的操作int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"插入成功");//参数1:sql语句管理指针//参数2:上面sql语句中 ?的位置,?的下标从1开始//参数3:要绑定的数据//参数4:数据的长度//绑定字段stu_name 的数据sqlite3_bind_text(stmt, 1, [student.name UTF8String], -1, NULL);//绑定字段stu_gender 的数据sqlite3_bind_text(stmt, 2, [student.gender UTF8String], -1, NULL);//绑定字段stu_age 的数据sqlite3_bind_int(stmt, 3, (int)student.age);//6.让sql语句执行sqlite3_step(stmt);}//7.释放掉管理指针sqlite3_finalize(stmt);//8.关闭数据库[self closeDataBase];}

返回表格中所有学生的接口——查1

– (NSMutableArray *)selectAllStudent{//1.打开数据库[self openDataBase];//2.准备sql语句NSString *sqlString = @"select * from Student";//3.创建管家指针sqlite3_stmt *stmt = nil;//4.验证sql语句是否正确int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);if (SQLITE_OK == result) {NSLog(@"查找全部语句成功");//创建可变数组存储找到所有的学生对象NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];//SQLITE_ROW 如果等于row说明下一行是有数据的,循环继续,如果不等于SQLITE_ROW ,说明下一行没有数据了,循环结束while (sqlite3_step(stmt) == SQLITE_ROW) {//依次读出字段的数据//列的编号是从零开始的//第一列int number = sqlite3_column_int(stmt, 0);//第二列NSString *name = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1) ];//第三列NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];//第四列int age = sqlite3_column_int(stmt, 3);//5.创建学生对象并赋值Student *stu = [[Student alloc]init];stu.number = number;stu.name = name;stu.gender = gender;stu.age = age;//添加到数组[array addObject:stu];//释放[stu release];}//6.释放管理指针sqlite3_finalize(stmt);//关闭数据库[self closeDataBase];return array;}else{sqlite3_finalize(stmt);[self closeDataBase];return nil;}}

含泪播种的人一定能含笑收获。

iOS中 DataBase SQL数据库 UI

相关文章:

你感兴趣的文章:

标签云: