首页 > 代码库 > ios数据库
ios数据库
#import <Foundation/Foundation.h>#import <sqlite3.h>#import "Student.h"@interface DataBaseHandler : NSObject{ // 添加一个成员变量 作用:指向本地的数据库文件,方便我们进行读写操作 sqlite3 *dbPoint;}// 把这个数据库处理类 写成一个单例// 单例方法的写法: 单例永远不会被释放 不可被改变// 1. 类方法(+)+(DataBaseHandler *)shareInstance;// 数据库的一些相关方法声明//打开数据库- (void)openDB;// 关闭数据库- (void)closeDB;// 创建表- (void)createTable;//insert-(void)insertStudent:(Student *)student;- (NSMutableArray *)selectAll;@end#import "DataBaseHandler.h"@implementation DataBaseHandler// 类方法的实现+ (DataBaseHandler *)shareInstance{ //创建一个静态指针, 只走一次这行代码 static DataBaseHandler *dataBase = nil; if(dataBase == nil) { // 如果指针为空, 说明这是第一次执行 dataBase = [[DataBaseHandler alloc] init]; } return dataBase;}- (void)openDB{ // 打开数据库 // 相关函数 // 获取沙盒中documents文件夹 NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 拼接一个数据库文件路径 NSString *dbPath = [docPath stringByAppendingPathComponent:@"suibian.db"]; NSLog(@"%@", dbPath); // 参数1: 数据库文件路径[dbPath UTF8String] 将oc字符串转为c的字符串; // 参数2: 数据库的指针地址 // 作用: 1.去找文件路径下有没有相应的文件 // 2. 如果没有,创建一个数据库文件,打开 // 3. 如果有打开 int result = sqlite3_open([dbPath UTF8String], &dbPoint); NSLog(@"结果: %d", result);}- (void)closeDB{ // 关闭数据库 sqlite3_close(dbPoint);}- (void)createTable{ // 创建一个表 // 执行sql语句的函数 // 参数1:数据库指针 // 参数2:sql语句 // 参数3: 回调函数 NSString *sql = @"create table student (name text,number integer primary key, sex text)"; int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL); NSLog(@"结果: %d", result);}- (void)insertStudent:(Student *)student{ NSString *sql = [NSString stringWithFormat:@"insert into student values (‘%@‘, %d, ‘%@‘)", student.name, student.number, student.sex]; int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL); NSLog(@"%d", result);}-(NSMutableArray *)selectAll{ // 搜索所有学生 NSMutableArray *allStu = [NSMutableArray array]; NSString *sql = @"select * from student"; // 1.设置一个数据库替身 也就是一个临时数据库 作用: 你对数据库的所有操作都暂时保存到替身中, 确认无误后,系统自动写到本地数据库 sqlite3_stmt *stmt = nil; // 2.确认sql语句的重要性 // 参数1: 数据库指针 // 参数2: SQL语句 // 参数3: 控制sql的长度(-1:不控制长度) // 参数4: 替身 // 作用: 1.检查sql语句的正却行 // 2.指定stmt为数据库的替身 int result = sqlite3_prepare_v2(dbPoint, [sql UTF8String], -1, &stmt, NULL); if(result == 0) { // sql确认无误,执行sql语句 while (sqlite3_step(stmt) == 0) { // 如果数据库中有符合搜索条件的一行, 就进入while循环体 // 按照列, 取得相应的值 // 获取第一列的值 // 参数1: 替身 // 参数2: 第几列 const unsigned char* nameChar = sqlite3_column_text(stmt, 0); NSString *name = [NSString stringWithUTF8String:(const char*)nameChar]; //获取第二列的值 int number = sqlite3_column_int(stmt, 1); // 获取第三列的值 NSString *sex = [NSString stringWithUTF8String:(const char*)sqlite3_column_text(stmt, 2)]; Student *stu = [[Student alloc] init]; stu.name = name; stu.number = number; stu.sex = sex; [allStu addObject:stu]; [stu release]; } } // 将替身中的所有数据操作都写到本地数据库, 销毁替身; sqlite3_finalize(stmt); return allStu;}@end
ios数据库
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。