随波逐流之IOS数据库的基本操作

// 初始化方法
// 创建单例类 进行对数据库 操作方法的封装
+ (SQLiteManager *)shareManager
{
    static SQLiteManager *manager = nil;
    if (manager == nil)
    {
        manager = [[SQLiteManager alloc] init];
    }
    return manager;
}

// 定义一个静态指针 负责 链接数据库
static sqlite3 *db = nil;
// 打开数据库
// sqlite3 * 表示咱们的数据库
- (sqlite3 *)openDB
{
    // 判断 如果数据库不为空 就说明数据库存在 直接返回
    if (db != nil)
    {
        return db;
    }
    // 不存在就创建一个数据库
    // 获取路径
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES) lastObject];
    //拼接路径
    // 数据库的名称 Student.sqlite
    NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"Student.sqlite"];
    NSLog(@"%@", dbPath);
    // 创建数据库
    // 参数1,文件路径 需要把OC 的字符串 转化一下类型dbPath.UTF8String
        // 参数2 数据库地址
    // sqlite3_open 该函数如果有数据库存在就打开 没有就创建一个出来
    int result = sqlite3_open(dbPath.UTF8String, &db);
    // 查看命令返回结果
    //SQLITE_OK 表示成功
    if (result == SQLITE_OK) {
        NSLog(@"创建成功");
    } else
    {
        NSLog(@"创建失败");
    }
    return db;
}
// 关闭数据库
- (void)closeDB
{
    // 关闭数据库
    int result = sqlite3_close(db);

    if (result == SQLITE_OK)
    {
        NSLog(@"关闭成功");
        // 如果成功 把数据库重置
        db = nil;
    } else
    {
        NSLog(@"关闭失败");
    }
}

// 创建一个表
- (void)createTable
{
    // 1. 打开数据库
    db = [self openDB];
    // 2. 写创建表的sql语句
    NSString *sql = @"create table IF NOT EXISTS student (number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL)";
    // 3. 执行这个语句
    char *error = nil;
    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error);
    // 4. 判断是否成功
    if (result == SQLITE_OK) {
        NSLog(@"创建表成功");
    } else
    {
        NSLog(@"创建失败表");
    }
    // 5. 关闭数据库
    [self closeDB];
}
// 插入数据
// 传入的不是model 而是它的信息
- (void)insertModel:(Model *) model
{
    // 打开数据库
    db = [self openDB];
    //创建sql语句
    NSString *sql =[NSString stringWithFormat:@"insert into student (number, name, gender, age) values ( '%ld', '%@', '%@', %ld)", model.number, model.name, model.gender, model.age];
    // 执行语句
    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);
    if (result == SQLITE_OK) {
        NSLog(@"插入成");
    } else
    {
        NSLog(@"失败了");
    }

}

// 删除
- (void)deleteModelWithAge:(NSInteger)age
{
    // 1. 打开数据库
    db = [self openDB];
    // 2. 写sql语句
    NSString *sql = [NSString stringWithFormat:@"delete from student where age > '%ld' ", age];
    // 3.执行语句
    int ruslt = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);
    // 4.判断是否成功
    if (ruslt == SQLITE_OK) {
        NSLog(@"删除成功");
    } else
    {
        NSLog(@"删除失败");
    }
    // 关闭
    [self closeDB];
}

// 更新
- (void)updateName:(NSString *)name setAge:(NSInteger)age
{
    db = [self openDB];
    NSString *sql = [NSString stringWithFormat:@"update  student set age = '%ld' where name = '%@' ", age, name];
    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);
    if (result == SQLITE_OK) {
        NSLog(@"更新成功");
    } else
    {
        NSLog(@"更新失败");
    }

}

// 查询 根据姓名和年龄查询 学生
- (Model *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age
{
    // 1. 打开数据库
    db = [self openDB];
    // 2. 写SQL语句
    NSString *sql = [NSString stringWithFormat:@"select *from student where name = '%@' and age = '%ld' ", name, age];
    // 3. 创建跟随指针 保存SQL语句
    sqlite3_stmt *stmt = nil;
    // 执行语句
    // 第三个参数 <#int nByte#> 表示SQL语句的长度
    // 第四个参数  截取未执行的语句 一般都NULL
    // 执行语句
    int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, NULL);
    // 5,判定是否成
    if (result == SQLITE_OK )
    {
        NSLog(@"查询语句成功");
        // 6. 绑定查询信息
        // 查询的条件是啥类型的 就选什么类型的 sqlite3_bind
        // 参数2 指查询的第几个问号 从1开始(name)
        // 参数3 填 查询条件的 字段名
        // 参数4 长度-1
        // 参数5 绑定后执行的函数 一般都是null
        sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
        // 绑定条件2
        // 参数2 指查询的第几个问号 从2开始(age)
        sqlite3_bind_int(stmt, 2, -1);
        // 7. 开始查询
        // sqlite3_step(stmt) == SQLITE_ROW
        // 如果 这条语句可以被找到 就返回SQLITE_ROW
        while (sqlite3_step(stmt) == SQLITE_ROW)
        {
            // 8. 获取数据
            // c参数2 <#int iCol#> 在数据库表中 列表从0 开始(自己写的属性) 需要打开数据库看一下在第几列
            char *name = (char *)sqlite3_column_text(stmt, 1);
            char *gender = (char *)sqlite3_column_text(stmt, 2);
            int age = sqlite3_column_int(stmt, 3);
            int number = sqlite3_column_int(stmt, 0);
            // 9. 给对象进行 赋值
            Model *model = [[Model alloc] init];
            // c语言的字符串 转回 OC 字符串
            model.name = [NSString stringWithUTF8String:name];
            model.gender = [NSString stringWithUTF8String:gender];
            model.age = age;
            model.number = number;
            // 10. 释放跟随指针
            sqlite3_finalize(stmt);
            // 关闭数据库
            [self closeDB];
            // 11. 返回数据 并释放对象
            return [model autorelease];
        }
    } else
    {
        NSLog(@"查询语句执行失败");
    }
    
    // 关闭数据库
    [self closeDB];
    return nil;
}

// 查询所有的学生信息
- (NSArray *)queryAllModel
{
    // 1.打开数据库
    db = [self openDB];
    // 2.sql 语句
    NSString *sql = @"select *from student";
    //3.创建跟随指针
    sqlite3_stmt *stmt = nil;
    // 4.执行SQL语句
    int result = sqlite3_prepare(db, sql.UTF8String , -1, &stmt, NULL);
    // 5.判断是否成功
    if (result == SQLITE_OK)
    {
        NSLog(@"all 查询成功");
        // 6. 不用绑定查询 创建一个数组(mutable) 保存查询好的model
        NSMutableArray *array = [NSMutableArray array];
        // 7. 开始查询
        while (sqlite3_step(stmt) == SQLITE_ROW)
        {
            // 8. 读取数据
            char *name = (char *)sqlite3_column_text(stmt, 1);
            char *gender = (char *) sqlite3_column_text(stmt, 2);
            int age = sqlite3_column_int(stmt, 3);
            int number = sqlite3_column_int(stmt, 0);
            // 9. 给对象赋值
            Model *model = [[Model alloc]init];
            model.name = [NSString stringWithUTF8String:name];
            model.gender = [NSString stringWithUTF8String:gender];
            model.age = age;
            model.number = number;
            // 10. 把model 放到数据中
            [array addObject:model];
            [model release];
            
        }
        // 11. s释放跟随指针
        sqlite3_finalize(stmt);

        // 12.关闭数据库
        [self closeDB];
        // 13. 返回数组
        return array;
    } else
    {
         NSLog(@"all 查询失败");
    }
    // 14. 关闭数据库
    [self closeDB];
    
    return nil;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的精简博客系统,源码+数据库+毕业论文+视频演示 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前企业对于博客信息的管理和控制,采用人工登记的方式保存相关数据,这种以人力为主的管理模式已然落后。本人结合使用主流的程序开发技术,设计了一款基于Springboot开发的精简博客系统,可以较大地减少人力、财力的损耗,方便相关人员及时更新和保存信息。本系统主要使用B/S开发模式,在idea开发平台上,运用Java语言设计相关的系统功能模块,MySQL数据库管理相关的系统数据信息,SpringBoot框架设计和开发系统功能架构,最后通过使用Tomcat服务器,在浏览器中发布设计的系统,并且完成系统与数据库的交互工作。本文对系统的需求分析、可行性分析、技术支持、功能设计、数据库设计、功能测试等内容做了较为详细的介绍,并且在本文中也展示了系统主要的功能模块设计界面和操作界面,并对其做出了必要的解释说明,方便用户对系统进行操作和使用,以及后期的相关人员对系统进行更新和维护。本系统的实现可以极大地提高企业的工作效率,提升用户的使用体验,因此在现实生活中运用本系统具有很大的使用价值。 关键词:博客管理;Java语言;B/S结构;MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值