ios数据库的增删改查

//导入框架

//创建一个学生对象NSObject,在.h中写入

@interface Student : NSObject


@property (nonatomic, retain)NSString *name;

@property (nonatomic, retain)NSString *sex;

@property (nonatomic, assign)NSInteger number;


@end

// 在学生对象.m中写入

- (void)dealloc

{

    [_name release];

    [_sex release];

    [super dealloc];

}



//创建一个数据库名字DataBaseHandler的NSObject,.h文件中写入下面声明方法

#import <Foundation/Foundation.h>

#import <sqlite3.h>

//引入学生头文件

#import "Student.h"

//在数据库的.h文件中写下面代码

@interface DataBaseHandler : NSObject

{

    //数据库指针, 指向本地的数据库文件

    sqlite3 *dbPoint;


}

//创建数据库的单例的创建方法

//单例的创建方法

//1.类方法

+ (DataBaseHandler *)shareInstance;



//打开数据库

- (BOOL)openDB;



//关闭数据库

- (BOOL)closeDB;



//创建表

- (BOOL)createTable;



//添加一条学生数据

- (BOOL)insertStudent:(Student *)stu;



//查询所有学生

- (NSMutableArray *)selectAll;



//修改(名字)

- (BOOL)updateStudent:(Student *)stu withName:(NSString *)newName;



//删除

- (BOOL)deleteStudentWithNumber:(int)number;


//在数据库的.m文件中写入以下内容

#import "DataBaseHandler.h"


@implementation DataBaseHandler


//数据库单例实现

+ (DataBaseHandler *)shareInstance

{

    //当第一次执行的时候会产生一个空指针

    static DataBaseHandler *handler = nil;

    

    //对指针进行判断, 当第一次执行的时候创建一个对象

    if (handler == nil) {

        

        handler = [[DataBaseHandler alloc] init];

 

    }

    

    //无论是创建的和已经存在的, 都在这里直接return出去

    return handler;

}


//打开数据库

-(BOOL)openDB

{

    //1.拼接一个数据库文件路径

    

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    //documents文件夹下拼接一个数据库文件地址

    NSString *dbPath = [docPath stringByAppendingPathComponent:@"suibian.db"];

    

    

    

    //参数1:数据库文件存储的路径(UTF8String可以直接将oc语言字符串转成c语言字符串)

    //参数2:数据库dbPoint指针地址

    //返回值:执行sqlite函数的结果(int类型)

    int result = sqlite3_open([dbPath UTF8String], &dbPoint);

    

    

    if (result == SQLITE_OK ) {

        

        NSLog(@"打开成功");

        return YES;

        

    }else {

        NSLog(@"打开失败");

        return NO;

    }


}


//关闭数据库

-(BOOL)closeDB

{

    int result = sqlite3_close(dbPoint);

    

    //利用封装的方法判断结果

    return [self judgeResult:result text:@"关闭"];

    

}


//判断结果的方法

- (BOOL)judgeResult:(int)result text:(NSString *)text

{

    if (result == SQLITE_OK) {

        

        NSLog(@"%@成功", text);

        return YES;

        

    }

    else{

        NSLog(@"%@失败", text);

        NSLog(@"错误编码: %d", result);


        return NO;

    }


}


//创建表的方法实现

- (BOOL)createTable

{

    NSString *sql = @"create table student(name text, number int primary key, sex text)";

    

    //执行sql语句的函数

    

    //参数1:数据库指针

    //参数2:sql语句

    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);

    

    return [self judgeResult:result text:@"创建表"];

    

}



//添加一条学生数据方法实现

- (BOOL)insertStudent:(Student *)stu

{

    //拼接sql语句的时候注意:字符串要以单引号(')标记, 其他的都不标记

    NSString *sql = [NSString stringWithFormat:@"insert into student values('%@', %ld, '%@')", stu.name, stu.number, stu.sex];

    

    //执行sql语句, 判断结果

    

    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);

    

    return [self judgeResult:result text:@"添加数据"];


    

}


//查询所有学生方法实现

- (NSMutableArray *)selectAll

{

    //1.创建一个数据库的替身, 存储对数据库的所有操作

    

    sqlite3_stmt *stmt = nil;

    

    //2.准备sql语句并执行, 将结果保存在stmt

    

    NSString *sql = @"select * from student";

    

    //参数1:数据库指针

    //参数2:sql语句

    //参数3:限制sql语句的长度(如果是-1的话, 就是不限制)

    //参数4:替身指针的地址

    //作用:让数据库执行sql语句, 并把结果保存到stmt

    int result = sqlite3_prepare_v2(dbPoint, [sql UTF8String], -1, &stmt, NULL);

    

    //3.创建一个可变数组, 用于存储数据

    

    NSMutableArray *stuArr = [NSMutableArray array];

    

    //4.去遍历所有的数据, 创建相应的学生对象

    

    if (result == SQLITE_OK) {

        

        //sql执行成功, 遍历数据

        //循环遍历所有的结果, 每次遍历到一条数据, 都会返回SQLITE_ROW, 如果没有数据了, 就不会返回SQLITE_ROW, 跳出循环

        while (sqlite3_step(stmt) == SQLITE_ROW) {

            

            //在循环体中去按例取数据

            

            //text类型的数据取法

            

            //参数1:替身

            //参数2:第几列

            const unsigned char *nameChar = sqlite3_column_text(stmt, 0);

            

            //char *字符串类型转为NSString字符串

            

            NSString *name = [NSString stringWithUTF8String:(const char *)nameChar];

            

            

            //int类型的数据

            

            int number = sqlite3_column_int(stmt, 1);

            

            

            //text类型的数据

            

            const unsigned char *sexChar = sqlite3_column_text(stmt, 2);

            

            //char *字符串类型转为NSString字符串

            

            NSString *sex = [NSString stringWithUTF8String:(const char *)sexChar];

            

            Student *stu = [[Student alloc] init];

            //拿获取到得数据 给学生对象赋值

            stu.name = name;

            stu.number = number;

            stu.sex = sex;

            

            //将学生对象添加到数组中

            [stuArr addObject:stu];

            [stu release];

            

        }

        

    }

    //销毁stmt替身, 把里面的操作和结果写入本地sqlite文件

    sqlite3_finalize(stmt);

    

    return stuArr;

}


//删除数据,根据主键删除

- (BOOL)deleteStudentWithNumber:(int)number

{

    NSString *sql = [NSString stringWithFormat:@"delete from student where number = '%d'", number];

    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);

    

    return [self judgeResult:result text:@"删除数据"];

}


// 在主页的 ViewController中写入

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    //单例的使用

    DataBaseHandler *dataHandler = [DataBaseHandler shareInstance];

    

    //打开数据库(调用)

    [dataHandler openDB];

    

    //创建表成功

    [dataHandler createTable];

    

    //添加数据

    Student *stu1 = [[Student alloc] init];

    stu1.name = @"aaa";

    stu1.number = 1;

    stu1.sex = @"man";

    

    [dataHandler insertStudent:stu1];


    //查询所有数据

    NSMutableArray *arr = [dataHandler selectAll];

    NSLog(@"%@", arr);


    //删除

    [dataHandler deleteStudentWithNumber:1];

    

    //关闭数据库

    [dataHandler closeDB];

    

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值