IOS学的容易---单例类进行对数据库操作方法的封装(一)

本文介绍了一个用于操作SQLite数据库的Objective-C类实现,包括数据库的创建、打开与关闭、表的创建及数据插入等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#import "SQliteManager.h"
@implementation SQliteManager
// 初始化方法
// 创建单例类 进行对数据库操作方法的封装
+ (SQliteManager *)shareManager
{
    // 静态区 搞个指针
    static SQliteManager *manager = nil;
    
    if (manager == nil) {
        manager = [[SQliteManager alloc] init];
    }
    return manager;
}
// 定义一个静态指针负责连接数据库
// 保证数据库一直到程序结束才被释放
static sqlite3 *db = nil;

#pragma mark - 打开数据库
// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB
{
    // 判断
    // 如果数据库不为空, 就说明数据库存在, 直接返回就行
    if (db != nil) {
        return db;
    }
    
    // 不存在 就创建一个
    // 获取路径
    NSArray *documentArrar = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentPath = [documentArrar lastObject];
    
    // 拼接路径
    // Student.sqlite 数据库的名称 (数据库的后缀为.sqlite)
    NSString *dbPath = [documentPath stringByAppendingPathComponent:@"Student.sqlite"];
    
    // 创建数据库
    // 参数1 <#const char *filename#> 要的是文件路径, 需要把OC字符串转化一下类型 dbPath.UTF8String
    // 参数2 <#sqlite3 **ppDb#> 数据库地址
    // sqlite3_open() 该函数表示如果有数据库存在就打开, 没有就创建出来一个
    int result = sqlite3_open(dbPath.UTF8String, &db);
    
    // 查看命令返回结果
    // SQLITE_OK 返回结果成功
    if (result == SQLITE_OK) {
        NSLog(@"打开成功 或者 创建成功");
    } else {
        NSLog(@"打开失败 或者 创建失败");
    }
    
    NSLog(@"数据库路径: %@", dbPath);
    
    
    // 创建成功或者打开成功就返回数据库
    return db;
}
#pragma mark - 关闭数据库
// 关闭不需要返回值
- (void)closeDB
{
    // 关闭数据库函数
    int result = sqlite3_close(db);
    
    if (result == SQLITE_OK) {
        NSLog(@"关闭数据库成功");
        
        // 如果成功 把数据库重置为空
        db = nil; // (置空目的 为了保证开启数据库是都走创建的哪个函数)
        
    } else {
        NSLog(@"关闭数据库失败");
    }
}
#pragma mark - 创建一个表
- (void)createTable
{
    // 创建表步骤
    // 1. 打开数据库
    // 2. 写创建表的sql语句
    // 3. 执行这条sql语句
    // 4. 判断返回值 (是否成功)
    // 5. 关闭数据库
    
    
    // 1. 打开数据库
    db = [self openDB];
    
    // 2. 写创建表的sql语句
    NSString *sql = @"create table IF NOT EXISTS lanOuStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL)";
        // 3. 执行这条sql语句
    // <#char **errmsg#> 错误信息
    
    char *error = nil; // char C语言的
    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error);

    // 4. 判断返回值 (是否成功)
    if (result == SQLITE_OK) {
        NSLog(@"创建表成功---");
    } else {
        NSLog(@"创建表失败---");
    }
    
    // 5. 关闭数据库
    [self closeDB];
    
}
#pragma mark - 插入数据
// 出入的不是model 而是model的信息
- (void)insertWithStudent:(LanOuStudent *)student
{
    // 插入的步骤
    // 1. 打开数据库
    // 2. 写sql语句
    // 3. 执行sql语句
    // 4. 判断是否插入成功
    // 5. 关闭数据库
    
    // 1. 打开数据库
    db = [self openDB];
    // 2. 写sql语句
    NSString *sql = [NSString stringWithFormat:@"insert into lanOuStudent(name, gender, age, number) values ('%@', '%@', '%ld', '%ld')", student.name, student.gender, student.age, student.number];
    
    
    // 3. 执行sql语句
        int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);
        
        // 4. 判断是否插入成功
        if (result == SQLITE_OK) {
            NSLog(@"插入 成功 !!!!!");
        } else {
            NSLog(@"插入 失败 !!!!!");
        }
    
    // 5. 关闭数据库
    [self closeDB]; 
}
@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值