Swift - SQLite中Data类型数据的插入、读取(BLOB类型字段)

我原来写一过一篇文章介绍如何使用第三方的  SQLiteBD  库来操作  SQLite  数据库( 点击查看 )。当时存取的都是一些数字、字符串这样的基本数据类型,有网友问如果想存个图片进去应该怎么做。本文演示如何实现  Data  类型的数据存取。

1,实现原理

(1)首先我们建表的时候,用于保存  Data 数据的字段要使用大数据类型,比如: BLOB(二进制数据)
(2)读取操作同其他数据类型的读取没什么差别。不过插入的时候要注意,不能直接将数据拼接到  sql 语句中,而是要使用预处理语句:
1
2
let  sql =  "insert into t_image(idata) values(?)"
db.execute(sql: sql, parameters:[imageData])


2,效果图

(1)程序启动后会自动判断是否存在图片表,没有的话就创建一张。表字段很简单,就一个  ID 主键,和一个  BLOB 类型的字段(用于存储图片数据)
(2)点击“ 保存”按钮,将项目中的  0.png 这张图片存储到图片表中。
(3)点击“ 读取”按钮,从图片表中取出图片数据,并显示在  imageview 中。
    原文:Swift - SQLite中Data类型数据的插入、读取(BLOB类型字段)       原文:Swift - SQLite中Data类型数据的插入、读取(BLOB类型字段)


3,样例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import  UIKit
 
class  ViewController UIViewController  {
     
     @IBOutlet  weak  var  imageView:  UIImageView !
     
     var  db: SQLiteDB !
 
     override  func  viewDidLoad() {
         super .viewDidLoad()
         
         //获取数据库实例
         db =  SQLiteDB .shared
         //如果表还不存在则创建表(其中uid为自增主键)
         let  result = db.execute(sql:  "create table if not exists t_image(uid integer primary key,idata blob)" )
         print ( "表创建完毕:\(result)" )
     }
     
     //点击保存
     @IBAction  func  saveData(_ sender:  Any ) {
         //获取图片并转换为Data
         let  imageURL =   Bundle .main.url(forResource:  "0" , withExtension:  "png" )!
         let  imageData = try!  Data (contentsOf: imageURL)
         //将Data数据插入到数据库
         let  sql =  "insert into t_image(idata) values(?)"
         let  result = db.execute(sql: sql, parameters:[imageData])
         print ( "数据保存完毕:\(result)" )
     }
 
     //点击加载
     @IBAction  func  loadData(_ sender:  Any ) {
         let  data = db.query(sql:  "select * from t_image" )
         if  data.count > 0 {
             //获取最后一行数据显示
             let  image = data[data.count - 1]
             if  let  imgData = image[ "idata" as Data  {
                 self .imageView.image =  UIImage (data: imgData)
                 print ( "数据读取完毕" )
             }
         }
     }
     
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}
源码下载 hangge_1578.zip
原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1578.html
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值