iOS开发15-iOS SQLite存取图片、视频、音频

iOS开发15-iOS SQLite存取图片、视频、音频


 代码下载(Xcode7.0.1)
 有问题请联系博主,邮箱:nathanlee1987@aliyun.com


在实际开发中有时候需要使用数据库存储图片、视频和音频数据。这个时候就需要将图片、视频音频数据转换成NSData,然后上传到数据库中。

读取数据的时候要从数据库获取这些NSData数据,然后再转换成应有的格式,存入到本地文件夹。


1、设计数据库

数据库的表的结构:m_data 类型是blob用来存储NSData二进制数据


建表语句:

CREATE TABLE myTable(m_id integer primary key autoincrement not null,m_name text,m_type text,m_time text,m_data blob)

2、上传图片、视频、音频到数据库

向数据库中添加数据的方法:

//添加图片、音乐、视频(数据类型、数据名、数据)
-(void)insertWithDataName:(NSString*)dataName DataType:(NSString*)dataType data:(NSData*)data{
    
    [self openDB];
    NSString *sqlString=@"insert into myTable (m_name ,m_type,m_data,m_time) values (?,?,?,?)";
    
    
    sqlite3_stmt *stmt=NULL;
  
    int result = sqlite3_prepare(db, sqlString.UTF8String, -1, &stmt, NULL);
    
    if (result==SQLITE_OK) {
        
        NSLog(@"预执行正确");
        
        //绑定参数
        //第1个问号
        sqlite3_bind_text(stmt, 1, dataName.UTF8String, -1, NULL);
        //第2个问号
        sqlite3_bind_text(stmt, 2, dataType.UTF8String, -1, NULL);
        //第3个问号
        sqlite3_bind_blob(stmt, 3, [data bytes], (int)[data length], NULL);
        //第4个问号
        sqlite3_bind_text(stmt, 4, [self getNowDate].UTF8String, -1, NULL);
        
        //执行
        if(sqlite3_step(stmt)==SQLITE_DONE)
            NSLog(@"插入成功");
        else NSLog(@"插入失败");
        
    }
    else NSLog(@"预执行错误");
    
   
    sqlite3_finalize(stmt);
    [self closeDB];
    
    
}


调用方法添加数据:

//将数据写入到数据库
-(void)button2Action:(UIButton*)sender{
    NSLog(@"添加数据");

     NSBundle *mainBundle =[NSBundle mainBundle];
    
    NSLog(@"添加 芦田爱菜.png");
    NSString *picPath = [mainBundle pathForResource:@"芦田爱菜" ofType:@"png"];
    NSData *dataPic = [[NSData alloc]initWithContentsOfFile:picPath];
    
    if (![[MyDataBaseHandle shareDatabase]checkWithDataName:@"芦田爱菜" DataType:@"png"]) {
         [[MyDataBaseHandle shareDatabase] insertWithDataName:@"芦田爱菜" DataType:@"png" data:dataPic];
    }
    else {
         [[MyDataBaseHandle shareDatabase] updateWithDataName:@"芦田爱菜" DataType:@"png" data:dataPic];
    }
   
    
    
     NSLog(@"添加 平凡之路-片段.mp3");
    NSString *MP3Path = [mainBundle pathForResource:@"平凡之路-片段" ofType:@"mp3"];
   
    NSData *dataMP3 = [[NSData alloc]initWithContentsOfFile:MP3Path];

    if (![[MyDataBaseHandle shareDatabase]checkWithDataName:@"平凡之路-片段" DataType:@"mp3"]) {
        [[MyDataBaseHandle shareDatabase] insertWithDataName:@"平凡之路-片段" DataType:@"mp3" data:dataMP3];
    }
    else {
        [[MyDataBaseHandle shareDatabase] updateWithDataName:@"平凡之路-片段" DataType:@"mp3" data:dataMP3];
    }
      
    
    NSLog(@"添加 SNH 赵粤.mp4");
     NSString *MP4Path = [mainBundle pathForResource:@"SNH 赵粤" ofType:@"mp4"];
     NSData *dataMP4 = [[NSData alloc]initWithContentsOfFile:MP4Path];
    
    if (![[MyDataBaseHandle shareDatabase]checkWithDataName:@"SNH 赵粤" DataType:@"mp4"]) {
        [[MyDataBaseHandle shareDatabase] insertWithDataName:@"SNH 赵粤" DataType:@"mp4" data:dataMP4];
    }
    else {
        
        [[MyDataBaseHandle shareDatabase] updateWithDataName:@"SNH 赵粤" DataType:@"mp4" data:dataMP4];
    }
    
 
    
}



3、下载图片、视频、音频,并存入本地文件夹

从数据库获取数据的方法:

//查
-(NSData *)selectWithDataName:(NSString*)dataName DataType:(NSString*)dataType{
    
    [self openDB];
    NSData * data = nil;
    NSString *sqlString=@"select m_data from myTable where m_name=? and m_type = ?";
    
    //2.伴随指针
    sqlite3_stmt *stmt=NULL;
    
    //3.预执行
    int result = sqlite3_prepare(db, sqlString.UTF8String, -1, &stmt, NULL);
    
    if (result==SQLITE_OK) {
        
        NSLog(@"语句正确");
        
        //4.绑定参数
        sqlite3_bind_text(stmt, 1, dataName.UTF8String, -1, NULL);
         sqlite3_bind_text(stmt, 2, dataType.UTF8String, -1, NULL);
        
        //5.执行(N次,因为有可能有N条数据符合条件)//循环判断是否还有符合查询条件的数据
        while (sqlite3_step(stmt)==SQLITE_ROW) {
            
           data =[[NSData alloc] initWithBytes:sqlite3_column_blob(stmt, 0) length: sqlite3_column_bytes(stmt, 0)];
            
        }
        
    }
    else NSLog(@"语句错误");
    
    //6.关闭伴随指针
    sqlite3_finalize(stmt);
  [self closeDB];
    return data;
}

调用方法,并将数据存储到本地文件夹:

//从数据库获取数据-并存储到本地文件夹
-(void)button3Action:(UIButton*)sender{
    
  
    
    NSString * destDateString =[self getNowDate];
    
    
    NSLog(@"搜索数据");
    
    
    
    获取png图片并写到本地
    NSData * data2=[[MyDataBaseHandle shareDatabase] selectWithDataName:@"芦田爱菜" DataType:@"png"];
   
    UIImage *image2 = [UIImage imageWithData:data2];
    [self.myIMV setImage:image2];
    
    NSString  *filePic=  [self.filesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@芦田爱菜.png",destDateString]];
    [data2 writeToFile:filePic atomically:YES];
    
    
    
    //获取Mp3并写到本地
   NSData * data3=[[MyDataBaseHandle shareDatabase] selectWithDataName:@"平凡之路-片段" DataType:@"mp3"];
    
    NSString  *filemp3=  [self.filesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@平凡之路-片段.mp3",destDateString]];
    [data3 writeToFile:filemp3 atomically:YES];
    
    
    //获取Mp4并写到本地
    NSData * data4=[[MyDataBaseHandle shareDatabase] selectWithDataName:@"SNH 赵粤" DataType:@"mp4"];
    
    NSString  *filemp4=  [self.filesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@SNH 赵粤.mp4",destDateString]];
    
    [data4 writeToFile:filemp4 atomically:YES];
    
  

}


程序执行效果:



数据库中写入的数据:



从数据库获取并写入到文件夹中的文件:





 代码下载(Xcode7.0.1)
 有问题请联系博主,邮箱:nathanlee1987@aliyun.com




著作权声明:本文由http://my.csdn.net/Nathan1987_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值