iOS数据持久化(二)SQLite

本文详细介绍SQLite数据库的使用方法,包括创建、打开、插入、查询、更新和删除操作,适用于移动端开发。

一、什么是SQLite

  SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,处理速度快,非常适合用于移动端开发。
二、使用
  创建DataBaseHandle.h   &    DataBaseHandle.m
  
DataBaseHandle.h
#import <Foundation/Foundation.h>
#import "Student.h"
@interface DataBaseHandle : NSObject
+ (DataBaseHandle *)shareDataBase;
- (void)openDB;
- (void)closeDB;
//添加数据
- (void)insertNewStudent:(Student *)student;
/**
 *  根据学号查询学生
 */
- (Student *)selectStudentWithNumber:(NSInteger)number;
/**
 *  查询表中所有数据
 */
- (NSMutableArray *)selectAllStudents;
/**
 *  根据学号删除
 */
- (void)deleteStudentWithNumber:(NSInteger)number;
- (void)updateStudent:(NSString *)gender WithNumber:(NSInteger)number;
@end

 

DataBaseHandle.m

+ (DataBaseHandle *)shareDataBase {
    @synchronized (self){
        if (handle == nil) {
            handle = [[DataBaseHandle alloc] init];
            
//            [handle closeDB];
        }
    }
    return handle;
}
sqlite3 *db = nil;

  打开数据库

- (void)openDB {
    NSString *str = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    NSString *path = [str stringByAppendingPathComponent:@"student.sqlite"];
    NSLog(@"%@",path);
    //打开数据库
    //UTF8String 将oc字符串转化为C语言字符串

    //方法执行完会返回一个数据库对象,这个对象已被初始化
    int result = sqlite3_open([path UTF8String], &db);
    //如果等于SQLITE_OK说明sql语句执行成功
    if (result == SQLITE_OK) {
        NSLog(@"数据库打开成功");
        //创建表格
        NSString *sqlString = @"create table if not exists Student (number integer primary key autoincrement,name text,gender text,age integer)";
          int result =  sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, NULL);
        if (result == SQLITE_OK) {
            NSLog(@"见表成功");
        }
    } else {
        NSLog(@"数据库打开失败");
    }
}

  关闭数据库

- (void)closeDB {
    int result = sqlite3_close(db);
    if (result == SQLITE_OK) {
        NSLog(@"关闭成功");
    }else {
        NSLog(@"关闭失败");
    }
}

  插入数据

- (void)insertNewStudent:(Student *)student {
    [self openDB];
    //准备sql语句
    NSString *sqlString = @"insert into Student (name,gender, age) values (?, ?, ?)";
    /*第一个参数,数据库指针,
     第二个参数,sql语句
     第三个参数,sql语句的长度,写成-1,自动计算
     第四个参数,创建管理sql语句的类,statement
     第五个参数,预留参数
     */
    sqlite3_stmt *stmt = nil;
    int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"添加语句成功");
        //绑定参数
        //绑定的参数:1.管理类指针,2.第几个问号,3.绑定的数据, 4.绑定数据的长度 -1   5.
        sqlite3_bind_text(stmt, 1, [student.name UTF8String], -1, NULL);
        sqlite3_bind_text(stmt, 2, [student.gender UTF8String], -1, NULL);
        sqlite3_bind_int(stmt, 3, (int)student.age);
        /**/
        sqlite3_step(stmt);
    } else {
        NSLog(@"添加语句失败");
    }
    sqlite3_finalize(stmt);
    [self closeDB];
}

  查询数据

- (NSMutableArray *)selectAllStudents {
    [self openDB];
    NSString *sqlString = @"select * from student";
    sqlite3_stmt *stmt = nil;
    int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, nil);
    if (result == SQLITE_OK) {
        NSLog(@"查询全部成功");
        //循环的条件:下一行还有数据,这时就能一直循环下去
        NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
            NSInteger age = sqlite3_column_int(stmt, 3);
            
            Student *stu = [[Student alloc] init];
            stu.name = name;
            stu.age = age;
            stu.gender = gender;
            [array addObject:stu];
            [stu release];
        }
        sqlite3_finalize(stmt);
        [self closeDB];

        return array;
    } else {
        NSLog(@"error");
        return nil;
    }
}

  

- (Student *)selectStudentWithNumber:(NSInteger)number {
    [self openDB];
    
    NSString *sqlString = @"select * from Student where number = ?";
    
    sqlite3_stmt *stmt = nil;
    int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"查询成功");
        //绑定参数
        sqlite3_bind_int(stmt, 1, (int)number);
        
        Student *student = [[[Student alloc] init]autorelease];
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            student.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
            student.gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
            student.age = sqlite3_column_int(stmt, 3);
        }
        sqlite3_finalize(stmt);
        [self closeDB];
        return student;
        
    } else {
        NSLog(@"不OK");
        return nil;
    }
}

  删除数据

- (void)deleteStudentWithNumber:(NSInteger)number {
    [self openDB];
    NSString *sqlString = @"delete from Student where number = ?";
    sqlite3_stmt *stmt = nil;
    int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);
    if (result == SQLITE_OK) {
        sqlite3_bind_int(stmt, 1, (int)number);
        //执行sql语句
        sqlite3_step(stmt);
    }
    //释放stmt的内存资源
    sqlite3_finalize(stmt);
    
    [self closeDB];
}

  修改数据

- (void)updateStudent:(NSString *)gender WithNumber:(NSInteger)number {
    [self openDB];
    
    NSString *sqlString = @"update Student set gender = ? where number = ?";
    sqlite3_stmt *stmt = nil;
    i nt result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL);
    
    if (result == SQLITE_OK) {
        sqlite3_bind_int(stmt, 2, (int)number);
        
        sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);
    [self closeDB];
}

  

转载于:https://my.oschina.net/codercd/blog/507023

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行次开发与仿真验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值