thieumao

Create database

Jan 6th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 10.65 KB | None | 0 0
  1. import UIKit
  2. import SQLite
  3.  
  4. class ViewController: UIViewController {
  5.    
  6.     let urlDb = "/Users/nguyen.van.thieub/Documents/thieumaofull.sqlite3"
  7.    
  8.    
  9.     override func viewDidLoad() {
  10.         super.viewDidLoad()
  11.        
  12. //        self.createTable("maotable")
  13. //        self.insertRow("maotable", key: "a1", enValue: "en 1", jaValue: "ja 1")
  14. //        self.insertRow("maotable", key: "a2", enValue: nil, jaValue: "ja 2")
  15. //        self.insertRow("maotable", key: "a3", enValue: "en 3", jaValue: nil)
  16. //        self.insertRow("maotable", key: "a4", enValue: nil, jaValue: nil)
  17. //        self.insertRow("maotable", key: "a5", enValue: "en 5", jaValue: "ja 5")
  18. //        
  19. //        self.createTable("maotable2")
  20. //        self.insertRow("maotable2", key: "a1", enValue: "en 1", jaValue: "ja 1")
  21. //        self.insertRow("maotable2", key: "a2", enValue: nil, jaValue: "ja 2")
  22. //        self.insertRow("maotable2", key: "a3", enValue: "en 3", jaValue: nil)
  23. //        self.insertRow("maotable2", key: "a4", enValue: nil, jaValue: nil)
  24. //        self.insertRow("maotable2", key: "a5", enValue: "en 5", jaValue: "ja 5")
  25. //        
  26. //        self.createTable("maotable3")
  27. //        self.insertRow("maotable3", key: "a1", enValue: "en 1", jaValue: "ja 1")
  28. //        self.insertRow("maotable3", key: "a2", enValue: nil, jaValue: "ja 2")
  29. //        self.insertRow("maotable3", key: "a3", enValue: "en 3", jaValue: nil)
  30. //        self.insertRow("maotable3", key: "a4", enValue: nil, jaValue: nil)
  31. //        self.insertRow("maotable3", key: "a5", enValue: "en 5", jaValue: "ja 5")
  32. //        
  33. //        self.createTable("maotab")
  34. //        self.insertRow("maotab", key: "a1", enValue: "en 1", jaValue: "ja 1")
  35. //        self.insertRow("maotab", key: "a2", enValue: nil, jaValue: "ja 2")
  36. //        self.insertRow("maotab", key: "a3", enValue: "en 3", jaValue: nil)
  37. //        self.insertRow("maotab", key: "a4", enValue: nil, jaValue: nil)
  38. //        self.insertRow("maotab", key: "a5", enValue: "en 5", jaValue: "ja 5")
  39. //        
  40. //        self.createTable("maot3")
  41. //        self.insertRow("maot3", key: "a1", enValue: "en 1", jaValue: "ja 1")
  42. //        self.insertRow("maot3", key: "a2", enValue: nil, jaValue: "ja 2")
  43. //        self.insertRow("maot3", key: "a3", enValue: "en 3", jaValue: nil)
  44. //        self.insertRow("maot3", key: "a4", enValue: nil, jaValue: nil)
  45. //        self.insertRow("maot3", key: "a5", enValue: "en 5", jaValue: "ja 5")
  46.        
  47.         let url = Bundle.main.resourceURL!
  48.         do {
  49.             let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)
  50.             var i = 0
  51.             for url in urls {
  52.                 if url.pathExtension == "yml" {
  53.                     do {
  54.                         i = i +  1
  55.                         print(">>>>>> ",i," ", url.lastPathComponent)
  56.                         let text = try String(contentsOf: url, encoding: String.Encoding.utf8)
  57.                         let myStrings = text.components(separatedBy: .newlines)
  58.                         var j = -3
  59.                         var nameTable = ""
  60.                         var key = ""
  61.                         var enValue : String? = nil
  62.                         var jaValue : String? = nil
  63.                         var isJa = true
  64.                         for myString in myStrings {
  65.                             j = j + 1
  66.                             if (myString.characters.count == 0) {
  67.                                 continue
  68.                             }
  69.                             switch j {
  70.                             case -2: // en hay ja
  71.                                 if self.removeEndString(myString) == "ja" {
  72.                                     isJa = true
  73.                                 } else {
  74.                                     isJa = false
  75.                                 }
  76. //                                print(self.removeEndString(myString), " = ", isJa)
  77.                                 print(j, ":: ", self.removeEndString(myString))
  78.                                 break
  79.                             case -1: // masters
  80.                                 print(j, ":: ", self.removeEndString(myString))
  81.                                 break
  82.                             case 0: // name table
  83.                                 nameTable = self.removeEndString(myString)
  84.                                 self.createTable(nameTable)
  85.                                 print(j, ":: ", self.removeEndString(myString))
  86.                                 break
  87.                             default: // .first = key, .second = value
  88.                                 if (j == 56) {
  89.                                
  90.                                 }
  91.                                 let myCutString = self.cutString(myString)
  92.                                 key = myCutString.first
  93.                                 jaValue = nil
  94.                                 enValue = nil
  95.                                 if isJa {
  96.                                     jaValue = myCutString.second
  97.                                 } else {
  98.                                     enValue = myCutString.second
  99.                                 }
  100.                                 if let id = self.isExist(nameTable, key: key) {
  101.                                     let row = self.getRowData(nameTable, key: key)
  102.                                     if let value = row.enValue {
  103.                                         enValue = value
  104.                                     }
  105.                                     if let value = row.jaValue {
  106.                                         jaValue = value
  107.                                     }
  108.                                     self.updateRow(nameTable, idTable: id, key: key, enValue: enValue, jaValue: jaValue)
  109.                                 } else {
  110.                                     self.insertRow(nameTable, key: key, enValue: enValue, jaValue: jaValue)
  111.                                 }
  112.                                 print(j, ":: ", myCutString.first, " - ", myCutString.second)
  113.                                 break
  114.                             }
  115.                         }
  116.                         //                        print(text)
  117.                     }
  118.                     catch {
  119.                         print("catch i=", i, " ", url.lastPathComponent)
  120.                     }
  121.                 }
  122.             }
  123.         } catch {
  124.             print(error)
  125.         }
  126.        
  127.     }
  128.    
  129.     func removeEndString(_ myString: String) -> String {
  130.         let trimmedString = myString.trimmingCharacters(in: .whitespaces)
  131.         return trimmedString.chopSuffix()
  132.     }
  133.    
  134.     func cutString (_ myString: String) -> (first: String, second: String) {
  135.         let trimmedString = myString.trimmingCharacters(in: .whitespaces)
  136.         let myStrings = trimmedString.components(separatedBy: ":")
  137.         if (myStrings.count == 2) {
  138.             let firstString = myStrings[0].trimmingCharacters(in: .whitespaces)
  139.             var secondString = myStrings[1].trimmingCharacters(in: .whitespaces)
  140.             secondString = secondString.chopSuffix()
  141.             secondString = secondString.chopPrefix()
  142.             return (first: firstString, second: secondString)
  143.         }
  144.         return (first: "", second: "")
  145.     }
  146.    
  147.     func createTable(_ nameTable: String) {
  148.         do {
  149.             let db = try Connection(self.urlDb)
  150.             let table = Table(nameTable)
  151.             let id = Expression<Int64>("id")
  152.             let key = Expression<String>("key")
  153.             let enValue = Expression<String?>("enValue")
  154.             let jaValue = Expression<String?>("jaValue")
  155.            
  156.             try db.run(table.create { t in
  157.                 t.column(id, primaryKey: true)
  158.                 t.column(key, unique: true)
  159.                 t.column(enValue)
  160.                 t.column(jaValue)
  161.             })
  162.         }
  163.         catch {
  164.         }
  165.     }
  166.    
  167.     func insertRow(_ nameTable: String, key: String, enValue: String?, jaValue: String?) {
  168.         do {
  169.             let db = try Connection(self.urlDb)
  170.             let table = Table(nameTable)
  171.             let key_field = Expression<String>("key")
  172.             let enValue_field = Expression<String?>("enValue")
  173.             let jaValue_field = Expression<String?>("jaValue")
  174.            
  175.             let insert = table.insert(key_field <- key, enValue_field <- enValue, jaValue_field <- jaValue)
  176.             try db.run(insert)
  177.         }
  178.         catch {
  179.         }
  180.     }
  181.    
  182.     func updateRow(_ nameTable: String, idTable: Int64, key: String, enValue: String?, jaValue: String?) {
  183.         do {
  184.             let db = try Connection(self.urlDb)
  185.             let table = Table(nameTable)
  186.             let id_field = Expression<Int64>("id")
  187.             let key_field = Expression<String>("key")
  188.             let enValue_field = Expression<String?>("enValue")
  189.             let jaValue_field = Expression<String?>("jaValue")
  190.            
  191.             let alice = table.filter(id_field == idTable)
  192.             try db.run(alice.delete())
  193.  
  194.             let insert = table.insert(id_field <- idTable, key_field <- key, enValue_field <- enValue, jaValue_field <- jaValue)
  195.             let id = try db.run(insert)
  196.             print("Khong duoc ah", id)
  197.         } catch {
  198.         }
  199.     }
  200.    
  201.     func getRowData(_ nameTable: String, key: String) -> (key: String?, enValue: String?, jaValue: String?)  {
  202.         do {
  203.             let db = try Connection(self.urlDb)
  204.             for row in try db.prepare("SELECT key, enValue, jaValue FROM " + nameTable) {
  205.                 if let keyValue = row[0] as? String, keyValue == key {
  206.                     return (key: keyValue, enValue: row[1] as! String?, jaValue: row[2] as! String?)
  207.                 }
  208.             }
  209.         } catch {
  210.         }
  211.         return (key: nil, enValue: nil, jaValue: nil)
  212.     }
  213.    
  214.     func isExist(_ nameTable: String, key: String) -> Int64? {
  215.         do {
  216.             let db = try Connection(self.urlDb)
  217.             for row in try db.prepare("SELECT id, key FROM " + nameTable) {
  218.                 if let value = row[0] as? Int64, let keyValue = row[1] as? String, keyValue == key {
  219.                     return value
  220.                 }
  221.             }
  222.         }
  223.         catch {
  224.         }
  225.         return nil
  226.     }
  227.    
  228. }
  229.  
  230. extension String {
  231.    
  232.     func chopPrefix(_ count: Int = 1) -> String {
  233.         return self.substring(from: self.characters.index(self.startIndex, offsetBy: count))
  234.     }
  235.    
  236.     func chopSuffix(_ count: Int = 1) -> String {
  237.         return self.substring(to: self.characters.index(self.endIndex, offsetBy: -count))
  238.     }
  239.    
  240. }
Advertisement
Add Comment
Please, Sign In to add comment