here first I change the UImage to NSData then convert the NSData to base64EncodedString. After that, save this row in sqlite database as TEXT instead of blob
func saveData() { var data = NSData() let contactDB = FMDatabase(path : databasePath as String) //insert an image let image = UIImage(named: "back.png") print(image) //convert an image into database NSdata() if let unwrappedImage = image { data = UIImagePNGRepresentation (unwrappedImage)! print("data" , data) // convert NSdata to baseEncodeng64 let dataStr = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) print("converted string" ,dataStr) // save into databse if contactDB.open() { //insert a query let insertQuery = "INSERT INTO USERINFO( USERIMAGE) VALUES('\((dataStr))')" let result = contactDB.executeUpdate(insertQuery, withArgumentsInArray: nil) if !result { print("Error: \(contactDB.lastErrorMessage())") } else { } } else { print("Error: \(contactDB.lastErrorMessage())") } } }
When extracting data from a selection of images that are stored in the sqlite database as a String, then convert base64EncodedString to NSdata back. After that, convert NSData back to image.
func fetchData() -> UIImage { var decodedimage = UIImage() var imageDataString = String() let countryDB = FMDatabase(path: databasePath as String ) if countryDB.open() { //insert a query to fetch imageStringData let querySQL = "SELECT USERIMAGE FROM USERINFO WHERE ID = \((1))" let results:FMResultSet? = countryDB.executeQuery(querySQL, withArgumentsInArray: nil) if results?.next() == true { imageDataString = (results?.stringForColumn("USERIMAGE"))! //convert NSString back to NSdata let decodedData = NSData(base64EncodedString: imageDataString, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) //convert NSdata back to the image decodedimage = UIImage(data: decodedData!)! print("retrieve image" , decodedimage) } else { print("record not found") } countryDB.close() } else { print("Error: \(countryDB.lastErrorMessage())") } return decodedimage }
source share