คุณสามารถใช้ไลบรารีนี้ใน Swift สำหรับ SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
SQLite Demo โดยใช้ Swift กับคลาส SQLDataAccess ที่เขียนด้วย Swift
การเพิ่มในโครงการของคุณ
คุณต้องการเพียงสามไฟล์เพื่อเพิ่มลงในโปรเจ็กต์ของคุณ * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header ต้องตั้งค่าในโครงการ Xcode ของคุณ 'Objective-C Bridging Header' ภายใต้ 'Swift Compiler - General'
ตัวอย่างการใช้งาน
เพียงทำตามรหัสใน ViewController.swift เพื่อดูวิธีการเขียน SQL อย่างง่ายด้วย SQLDataAccess.swift ก่อนอื่นคุณต้องเปิดฐานข้อมูล SQLite ที่คุณจัดการด้วย
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
หาก openConnection สำเร็จตอนนี้คุณสามารถแทรกลงใน Table AppInfo ได้อย่างง่ายดาย
//Insert into Table AppInfo
let status = db.executeStatement("insert into AppInfo (name,value,descrip,date) values(?,?,?,?)",
”SQLiteDemo","1.0.2","unencrypted",Date())
if(status)
{
//Read Table AppInfo into an Array of Dictionaries
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
ดูว่าง่ายแค่ไหน!
คำแรกใน db.executeStatement คือ SQL ของคุณเป็น String คำศัพท์ทั้งหมดที่ตามมาคือรายการอาร์กิวเมนต์ตัวแปรประเภท Any และเป็นพารามิเตอร์ของคุณใน Array คำศัพท์ทั้งหมดนี้คั่นด้วยเครื่องหมายจุลภาคในรายการอาร์กิวเมนต์ SQL ของคุณ คุณสามารถป้อน Strings, Integers, Date และ Blobs ได้ทันทีหลังจากคำสั่ง sequel เนื่องจากคำศัพท์เหล่านี้ทั้งหมดถือเป็นพารามิเตอร์สำหรับผลสืบเนื่อง อาร์เรย์อาร์กิวเมนต์ตัวแปรทำให้สะดวกในการป้อนภาคต่อทั้งหมดของคุณในการเรียก executeStatement หรือ getRecordsForQuery เพียงครั้งเดียว หากคุณไม่มีพารามิเตอร์อย่าป้อนอะไรเลยหลัง SQL ของคุณ
อาร์เรย์ผลลัพธ์คืออาร์เรย์ของพจนานุกรมโดยที่ 'คีย์' คือชื่อคอลัมน์ตารางของคุณและ 'ค่า' คือข้อมูลของคุณที่ได้รับจาก SQLite คุณสามารถวนซ้ำผ่านอาร์เรย์นี้ได้อย่างง่ายดายด้วย for loop หรือพิมพ์ออกมาโดยตรงหรือกำหนดองค์ประกอบ Dictionary เหล่านี้ให้กับคลาสอ็อบเจ็กต์ข้อมูลแบบกำหนดเองที่คุณใช้ใน View Controllers สำหรับการใช้โมเดล
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess จะจัดเก็บข้อความคู่ลอยหยดวันที่จำนวนเต็มและจำนวนเต็มยาว สำหรับ Blobs คุณสามารถจัดเก็บ binary, varbinary, blob
สำหรับข้อความคุณสามารถจัดเก็บถ่านอักขระก้อนอักขระที่แตกต่างกันของประเทศอักขระพื้นเมือง nchar nvarchar varchar ตัวแปรอักขระที่แตกต่างกันข้อความ
สำหรับ Dates คุณสามารถจัดเก็บ datetime, time, timestamp, date ได้
สำหรับจำนวนเต็มคุณสามารถจัดเก็บ bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int
สำหรับคู่คุณสามารถจัดเก็บทศนิยม, ความแม่นยำสองเท่า, ลอย, ตัวเลข, จริง, สองเท่า Double มีความแม่นยำมากที่สุด
คุณยังสามารถจัดเก็บ Nulls ประเภท Null
ใน ViewController.swift มีตัวอย่างที่ซับซ้อนมากขึ้นซึ่งแสดงวิธีการแทรกพจนานุกรมเป็น 'Blob' นอกจากนี้ SQLDataAccess ยังเข้าใจ Swift Date () ดั้งเดิมเพื่อให้คุณสามารถแทรกวัตถุเหล่านี้ได้โดยไม่ต้องแปลงและจะแปลงเป็นข้อความและจัดเก็บและเมื่อดึงข้อมูลแล้วจะแปลงกลับจากข้อความเป็นวันที่
แน่นอนว่าพลังที่แท้จริงของ SQLite คือความสามารถในการทำธุรกรรม ที่นี่คุณสามารถจัดคิวคำสั่ง SQL 400 รายการพร้อมพารามิเตอร์และแทรกทั้งหมดพร้อมกันซึ่งมีประสิทธิภาพมากเนื่องจากมันเร็วมาก ViewController.swift ยังแสดงตัวอย่างวิธีการทำเช่นนี้ สิ่งที่คุณทำจริงๆคือการสร้าง Array of Dictionaries ที่เรียกว่า 'sqlAndParams' ใน Array นี้จัดเก็บ Dictionaries ของคุณด้วยสองปุ่ม 'SQL' สำหรับคำสั่ง String sequel หรือ query และ 'PARAMS' ซึ่งเป็นเพียง Array ของวัตถุพื้นเมือง SQLite เข้าใจคำค้นหานั้น 'sqlParams' ซึ่งเป็นพจนานุกรมของคิวรีต่อเนื่องและพารามิเตอร์แต่ละตัวจะถูกเก็บไว้ในอาร์เรย์ 'sqlAndParams' เมื่อคุณสร้างอาร์เรย์นี้แล้วคุณก็โทรหา
let status = db.executeTransaction(sqlAndParams)
if(status)
{
//Read Table AppInfo into an Array of Dictionaries for the above Transactions
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
นอกจากนี้เมธอด executeStatement และ getRecordsForQuery ทั้งหมดยังสามารถทำได้ด้วยสตริงแบบง่ายสำหรับคิวรี SQL และ Array สำหรับพารามิเตอร์ที่คิวรีต้องการ
let sql : String = "insert into AppInfo (name,value,descrip) values(?,?,?)"
let params : Array = ["SQLiteDemo","1.0.0","unencrypted"]
let status = db.executeStatement(sql, withParameters: params)
if(status)
{
//Read Table AppInfo into an Array of Dictionaries for the above Transactions
let results = db.getRecordsForQuery("select * from AppInfo ")
NSLog("Results = \(results)")
}
นอกจากนี้ยังมีเวอร์ชัน Objective-C และเรียกว่า SQLDataAccess เดียวกันดังนั้นตอนนี้คุณสามารถเลือกที่จะเขียนภาคต่อของคุณใน Objective-C หรือ Swift นอกจากนี้ SQLDataAccess จะทำงานร่วมกับ SQLCipher โค้ดปัจจุบันยังไม่ได้ตั้งค่าให้ใช้งานได้ แต่ค่อนข้างง่ายที่จะทำและตัวอย่างวิธีการทำเช่นนี้มีอยู่ใน SQLDataAccess เวอร์ชัน Objective-C
SQLDataAccess เป็นคลาสที่รวดเร็วและมีประสิทธิภาพมากและสามารถใช้แทน CoreData ซึ่งจริงๆแล้วใช้ SQLite เนื่องจากเป็นที่เก็บข้อมูลพื้นฐานโดยไม่มีข้อผิดพลาดด้านความสมบูรณ์ของข้อมูลหลักของ CoreData ทั้งหมดที่มาพร้อมกับ CoreData