数据库篇——代码操作数据库

1.添加数据库并导入头文件

在这里插入图片描述

#import <sqlite3.h>

2.定义一个数据库指针

@property(nonatomic, assign) sqlite3 *sql;

3.打开/创建数据库

//如果数据库不存在就创建 如果存在就直接打开
- (void)open{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"db.sql"];
    
    int result = sqlite3_open([path UTF8String], &_sql);
    if (result == SQLITE_OK) {
        NSLog(@"打开数据库成功");
    }else{
        NSLog(@"打开数据库失败");
    }
}

4.创建表

- (void)createTable{
    //1.创建sql语句
    NSString *createSql = @"create table student(id integer primary key autoincrement, name text, age integer)";
    //2.执行语句
    int result = sqlite3_exec(_sql, [createSql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"创建表成功");
    }else{
        NSLog(@"创建表失败");
    }
}

5.插入数据(一条记录)

- (void)insert{
    NSString *insertSql = @"insert into student(name,age) values('jack',20)";
    if (sqlite3_exec(_sql, [insertSql UTF8String], NULL, NULL, NULL)) {
        NSLog(@"插入数据成功");
    }else{
        NSLog(@"插入数据失败");
    }
}

6.插入数据(一个字段)

- (void)addColumn{
    NSString *alterSql = @"alter table student add icon blob";
    if (sqlite3_exec(_sql, [alterSql UTF8String], NULL, NULL, NULL)) {
        NSLog(@"添加字段成功");
    }else{
        NSLog(@"添加字段失败");
    }
}

7.插入数据(图片视频音频等类型)

- (void)insertMultiple{
    //?:占位符
    NSString *insetSql = @"insert into student(name,age,icon) values(?,?,?)";
    
    //预处理
    sqlite3_stmt *stmt = NULL;
    if(sqlite3_prepare(_sql, [insetSql UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
        //取图片的二进制数据
        UIImage *img = [UIImage imageNamed:@"1"];
        NSData *imgData = UIImagePNGRepresentation(img);
        
        //绑定数据
        sqlite3_bind_text(stmt, 1, "jone", -1, NULL);
        sqlite3_bind_int(stmt, 2, -1);
        sqlite3_bind_blob(stmt, 3, [imgData bytes], (int)imgData.length, NULL);
        
        //将绑定的数据保存到数据库里面
        if (sqlite3_step(stmt) == SQLITE_DONE) {
            NSLog(@"保存数据成功");
        }else{
            NSLog(@"保存数据失败");
        }
    }else{
        NSLog(@"预处理失败");
    }
}

8.更新数据

/*
sqlite3_open():
第一个参数:要打开的数据库的路径需要utf-8编码
第二个参数:数据库指针的地址
*/
- (void)update{
    NSString *updateSql = @"update into student set name='rose',age=18 where id=1";
    if (sqlite3_exec(_sql, [updateSql UTF8String], NULL, NULL, NULL)) {
        NSLog(@"更新数据成功");
    }else{
        NSLog(@"更新数据失败");
    }
}

9.查询表

- (void)select{
    NSString *selectSql = @"select * from student";
    //1.预处理 将数据先保存起来
    sqlite3_stmt *stmt = NULL;
    //-1:表示自动计算
    if(sqlite3_prepare(_sql, [selectSql UTF8String], -1, &stmt, NULL) == SQLITE_OK){
        //2.一条一条地读取数据
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            //一列一列去取每一条记录
            char *name = (char *)sqlite3_column_text(stmt, 1);
            int age = sqlite3_column_int(stmt, 2);
            
            NSData *data = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)];
            
            UIImage *image = [UIImage imageWithData:data];
            
            NSLog(@"%@ %s %d",image ,name , age);
        }
    }else{
        NSLog(@"预处理失败");
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43733988/article/details/90345230