在swift中将图像保存到SQLite数据库

时间:2016-08-25 03:59:24

标签: ios swift sqlite fmdb

在我的应用中,我正在从原始图像裁剪图像并直接插入到blob类型的数据库中,并将裁剪后的图像转换为NSData。现在我希望将裁剪后的图像保存在照片库中,并将其路径保存在Sqlite数据库中,并使用正确的名称和格式,以便我可以检索它。我正在使用FMDB数据库。任何人都可以帮助我吗?

源代码如下:

class TicketDetailViewController: UIViewController, WCSessionDelegate {

  var databasePath = NSString()
  var holding_Ticket_category: String = ""
  var holding_Image: UIImage?
  var hold_ticketName: String = ""
  var hold_ticketDate: String = ""
  var hold_ticketTime: String = ""
  var session: WCSession!
  var ticketDataArray :[TicketData] = []

  @IBOutlet weak var ticket_grey: UIImageView!
  @IBOutlet weak var cropped_frame: UIImageView!
  @IBOutlet weak var display_image: UIImageView!
  @IBOutlet weak var ticket_type_name: UILabel!
  @IBOutlet weak var ticket_date: UILabel!
  @IBOutlet weak var ticket_time: UILabel!
  @IBOutlet weak var ticket_category: UILabel!

  override func viewDidLoad() {
    super.viewDidLoad()

    if WCSession.isSupported() {
      self.session  = WCSession.defaultSession()
      self.session.delegate = self
      self.session.activateSession()
    }

    display_image.image = holding_Image
    ticket_type_name.text = hold_ticketName
    ticket_date.text = hold_ticketDate
    ticket_time.text = hold_ticketTime
    ticket_category.text = holding_Ticket_category

    let filemgr =  NSFileManager.defaultManager()
    let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let docsDir = dirPaths[0]
    var ticketDB: FMDatabase

    databasePath = (docsDir as NSString).stringByAppendingPathComponent("ticket_Pass.sqlite")

    if !filemgr.fileExistsAtPath(databasePath as String) { 
      ticketDB = FMDatabase(path: databasePath as String)
      if ticketDB.open() {    
        let sql_stmt = "CREATE TABLE IF NOT EXISTS TICKET (ID INTEGER PRIMARY KEY AUTOINCREMENT, IMAGE BLOB, TICKET_CATEGORY TEXT, TICKET_TYPE TEXT, DATE TEXT, TIME TEXT)"
        if !ticketDB.executeStatements(sql_stmt) {
          print("Error: \(ticketDB.lastErrorMessage())")
        }
        ticketDB.close()
      } else {
        print("Error: \(ticketDB.lastErrorMessage())")
      }
    }
  }

  @IBAction func addTickets(sender: UIButton) {

    let ticketDB = FMDatabase(path: databasePath as String)
    if ticketDB.open() {
      let insertSQL = "INSERT INTO TICKET (image, ticket_category, ticket_type, date, time) VALUES ('\(display_image.image!)', '\(ticket_category.text!)', '\(ticket_type_name.text!)', '\(ticket_date.text!)', '\(ticket_time.text!)')"
      let result = ticketDB.executeUpdate(insertSQL,withArgumentsInArray: nil)
      if !result {
        print("Error: \(ticketDB.lastErrorMessage())")
      } else {
        let alt = PMAlertController(title: "Success!", description: "Your data is saved to Database!", image: UIImage(named: ""), style: .Alert)
        alt.addAction(PMAlertAction(title: "OK!", style: .Default, action: { (ACTION) -> Void in
          self.navigationController?.popToRootViewControllerAnimated(true)
        }))
        self.presentViewController(alt, animated: true, completion: nil)
        print(databasePath)
      }
    }
  }

  @IBAction func deleteTickets(sender: UIButton) {
    let alt = PMAlertController(title: "Delete Ticket Details!", description: "Are you sure?", image: UIImage(named: ""), style: .Alert)

    alt.addAction(PMAlertAction(title: "Cancel", style: PMAlertActionStyle.Default, action: { (ACTION) -> Void in
      self.dismissViewControllerAnimated(true, completion: nil)
    }))
    alt.addAction(PMAlertAction(title: "OK", style: PMAlertActionStyle.Default, action: { (ACTION) -> Void in
      self.navigationController?.popToRootViewControllerAnimated(true)
    }))
    self.presentViewController(alt, animated: true, completion: nil)
  }

  @IBAction func sendToWatch(sender: AnyObject) {
    let ticketDB = FMDatabase(path: databasePath as String)
    if ticketDB.open() {
      let imgdata:NSData = UIImagePNGRepresentation(self.display_image.image!)! 
      let insertSQL = "INSERT INTO TICKET (image, ticket_category, ticket_type, date, time) VALUES ('\(imgdata)', '\(ticket_category.text!)', '\(ticket_type_name.text!)', '\(ticket_date.text!)', '\(ticket_time.text!)')"

      let result = ticketDB.executeUpdate(insertSQL,withArgumentsInArray: nil)
      if !result {
        print("Error: \(ticketDB.lastErrorMessage())")
      } else {
        let alt = PMAlertController(title: "Success!", description: "Your data is saved to Database!", image: UIImage(named: ""), style: .Alert)

        alt.addAction(PMAlertAction(title: "OK!", style: .Default, action: { (ACTION) -> Void in
          let ticketDB = FMDatabase(path: self.databasePath as String)

          if ticketDB.open() {
            //let querySQL = "SELECT * FROM TICKET ORDER BY ID DESC LIMIT 1"
            let querySQL = "SELECT * FROM TICKET"
            let result: FMResultSet? = ticketDB.executeQuery(querySQL, withArgumentsInArray: nil)
            if let result = result {
              var ticketData = TicketData()
              var latestTicketDict = [NSObject:AnyObject]()
              // self.ticketDataArray = NSMutableArray()
              while (result.next() == true) {
                let image = result.stringForColumn("image")
                let ticket_category = result.stringForColumn("ticket_category")
                let ticket_type = result.stringForColumn("ticket_type")
                let date = result.stringForColumn("date")
                let time = result.stringForColumn("time")
                ticketData = TicketData(field1: ticket_category!, field2: ticket_type!, field3: date!, field4: time!, field5: image!)
                self.ticketDataArray.append(ticketData)
                latestTicketDict = result.resultDictionary()
              }
              print("Data:- \(latestTicketDict)")
            }            
          } else {
            print("Error: \(ticketDB.lastErrorMessage())")             
          }
          let dicData = ["a":TicketData()]
          self.session.sendMessage(dicData, replyHandler: nil, errorHandler: nil)
          print("data--->\(dicData)")           
          ticketDB.close()

        }))

        self.presentViewController(alt, animated: true, completion: nil)
        print(databasePath)      
      }
    }
  }
}

0 个答案:

没有答案