Bạn có thể sử dụng thư viện này trong Swift cho SQLite
https://github.com/pmurphyjam/SQLiteDemo
SQLiteDemo
SQLite Demo sử dụng Swift với lớp SQLDataAccess được viết bằng Swift
Thêm vào dự án của bạn
Bạn chỉ cần ba tệp để thêm vào dự án của mình * SQLDataAccess.swift * DataConstants.swift * Bridging-Header.h Bridging-Header phải được đặt trong dự án Xcode của bạn 'Objective-C Bridging Header' trong 'Swift Compiler - General'
Ví dụ để sử dụng
Chỉ cần làm theo mã trong ViewController.swift để xem cách viết SQL đơn giản với SQLDataAccess.swift Trước tiên, bạn cần mở Cơ sở dữ liệu SQLite mà bạn đang xử lý
let db = SQLDataAccess.shared
db.setDBName(name:"SQLite.db")
let opened = db.openConnection(copyFile:true)
Nếu openConnection thành công, bây giờ bạn có thể thực hiện một thao tác chèn đơn giản vào 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)")
}
Hãy xem điều đó thật đơn giản!
Thuật ngữ đầu tiên trong db.executeStatement là SQL của bạn dưới dạng Chuỗi, tất cả các thuật ngữ theo sau là danh sách đối số đa dạng kiểu Bất kỳ và là các tham số của bạn trong Mảng. Tất cả các thuật ngữ này được phân tách bằng dấu phẩy trong danh sách các đối số SQL của bạn. Bạn có thể nhập Chuỗi, Số nguyên, Ngày tháng và Khối ngay sau câu lệnh phần tiếp theo vì tất cả các thuật ngữ này được coi là tham số cho phần tiếp theo. Mảng đối số đa dạng chỉ giúp bạn nhập tất cả phần tiếp theo của bạn một cách thuận tiện chỉ trong một lệnh gọi executeStatement hoặc getRecordsForQuery. Nếu bạn không có bất kỳ tham số nào, đừng nhập bất kỳ thứ gì sau SQL của bạn.
Mảng kết quả là một Mảng Từ điển trong đó 'khóa' là tên cột bảng của bạn và 'giá trị' là dữ liệu của bạn lấy từ SQLite. Bạn có thể dễ dàng lặp lại mảng này bằng vòng lặp for hoặc in ra trực tiếp hoặc gán các phần tử Từ điển này cho các Lớp đối tượng dữ liệu tùy chỉnh mà bạn sử dụng trong Bộ điều khiển Chế độ xem để sử dụng mô hình.
for dic in results as! [[String:AnyObject]] {
print(“result = \(dic)”)
}
SQLDataAccess sẽ lưu trữ, text, double, float, blob, Date, integer và các số nguyên dài. Đối với Blob bạn có thể lưu trữ binary, varbinary, blob.
Đối với Văn bản, bạn có thể lưu trữ ký tự char, ký tự, dấu gạch ngang, ký tự thay đổi quốc gia, ký tự bản địa, nchar, nvarchar, varchar, biến thể, ký tự khác nhau, văn bản.
Đối với Ngày, bạn có thể lưu trữ datetime, time, timestamp, date.
Đối với Số nguyên, bạn có thể lưu trữ bigint, bit, bool, boolean, int2, int8, integer, mediumint, smallint, tinyint, int.
Đối với Double, bạn có thể lưu trữ thập phân, chính xác kép, float, số, thực, gấp đôi. Đôi có độ chính xác nhất.
Bạn thậm chí có thể lưu trữ Null kiểu Null.
Trong ViewController.swift, một ví dụ phức tạp hơn được thực hiện cho thấy cách chèn Từ điển dưới dạng 'Blob'. Ngoài ra, SQLDataAccess hiểu Swift Date () nguyên gốc để bạn có thể chèn các đối tượng này mà không cần chuyển đổi, và nó sẽ chuyển đổi chúng thành văn bản và lưu trữ chúng, và khi được truy xuất, hãy chuyển đổi chúng từ văn bản thành Ngày.
Tất nhiên sức mạnh thực sự của SQLite là khả năng Giao dịch. Ở đây, bạn có thể xếp hàng 400 câu lệnh SQL với các tham số và chèn tất cả chúng cùng một lúc, điều này thực sự mạnh mẽ vì nó quá nhanh. ViewController.swift cũng cho bạn thấy một ví dụ về cách thực hiện việc này. Tất cả những gì bạn thực sự đang làm là tạo một Mảng Từ điển có tên là 'sqlAndParams', trong Mảng này Từ điển lưu trữ của bạn có hai khóa 'SQL' cho câu lệnh hoặc truy vấn phần tiếp theo của Chuỗi và 'PARAMS' chỉ là Mảng các đối tượng gốc SQLite hiểu cho truy vấn đó. Mỗi 'sqlParams' là một Từ điển riêng lẻ của truy vấn phần tiếp theo cộng với các tham số sau đó được lưu trữ trong Mảng 'sqlAndParams'. Khi bạn đã tạo mảng này, bạn chỉ cần gọi.
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)")
}
Ngoài ra, tất cả các phương thức executeStatement và getRecordsForQuery có thể được thực hiện với truy vấn Chuỗi cho SQL đơn giản và một Mảng cho các tham số cần thiết của truy vấn.
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)")
}
Một phiên bản Objective-C cũng tồn tại và được gọi là SQLDataAccess tương tự, vì vậy bây giờ bạn có thể chọn viết phần tiếp theo của mình bằng Objective-C hoặc Swift. Ngoài ra SQLDataAccess cũng sẽ hoạt động với SQLCipher, mã hiện tại chưa được thiết lập để hoạt động với nó, nhưng nó khá dễ thực hiện và một ví dụ về cách thực hiện điều này thực sự có trong phiên bản Objective-C của SQLDataAccess.
SQLDataAccess là một lớp rất nhanh và hiệu quả, và có thể được sử dụng thay cho CoreData thực sự chỉ sử dụng SQLite vì nó là nơi lưu trữ dữ liệu cơ bản mà không có tất cả các sự cố về tính toàn vẹn dữ liệu lõi CoreData đi kèm với CoreData.