前言

聽說原生SQLite需要匯入.h
與相容OC的程式碼
看起來是相當麻煩啊
在網路上看見別人推薦使用
第三方SQLite.swift
就決定來試試看
那就開始囉

SQLite 步驟與基本文法

在iOS下 會在Document文件夾下創立一個Chuhuo.sqlite的資料庫
並且要求連接資料庫

let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let db = try? Connection("\(path)/Chuhuo.sqlite")

然後創立一些Table name
這裡使用stock直接當作名稱

let users = Table("stock")

設立一些Table欄位的資料格式
除了id以外 目前先暫時用String下去做測試

let id = Expression<Int64>("id")
let price = Expression<String>("price")
let product = Expression<String>("product")
let date = Expression<String>("date")
let amount = Expression<String>("amount")

這裡就是要創立Table重頭戲了
造上面設定的下去新增欄位
除了id必須設定流水號
以確保資料庫以後管理方便

新增 CREATE

try! db?.run(users.create(ifNotExists: true, block: { (table) in
    table.column(id, primaryKey: true)
    table.column(price)
    table.column(product)
    table.column(date)
    table.column(amount)
}))

等同於SQL

CREATE TABLE IF NOT EXISTS "stock" (
     "id" INTEGER PRIMARY KEY NOT NULL,
     "price" TEXT,
     "product" TEXT,
     "date" TEXT,
     "amount" TEXT,
)

插入 INSERT

新增資料

do {
    let rowid = try db?.run(users.insert(price <- "100", product <- "car", date <- "2018/10/10", amount <- "1"))
    print("inserted id: \(rowid!)")
} catch {
    print("insertion failed: \(error)")
}

等同於SQL

INSERT INTO stock (price,product,date,amount) values('100','car','2018/10/10','0')

查詢 SELECT

查詢

for user  in (try? db?.prepare(users))!! {
    print("id: \(user[id]), price: \(user[price]), email: \(user[product])")
}

等同於SQL

SELECT * FROM stock

更新 UPDATE

更新

let alice = users.filter(id == 5)
try? db?.run(alice.update(price <- "130"))

等同於SQL

update stock set price = 130 where id == 5

刪除 DELETE

刪除

let alice = users.filter(id == 5)
try? db?.run(alice.delete())

等同於SQL

delete from stock where id = 5

差不多是這樣了
基本上所有都測試過可以作動才PO


Categorized in: