测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年3月 |
SwiftSwift版本 | 3.0 |
SPM支持SPM | ✗ |
由Chamira Fernando维护。
“一切都应该尽可能地简单,但不是更简单” - 阿尔伯特·爱因斯坦
想法是提供一个简单的Swift接口来运行基本的SQL语句/查询,例如CREATE TABLE、SELECT、INSERT、UPDATE和DELETE。有大量的iOS库可以很好地处理复杂的SQLite操作,但其中绝大多数库都提供了我们所需要的工具以上的功能。因此,我们的想法是去掉所有模板代码,使事物尽可能简单。您自己编写SQL。
建模、处理对象、编写业务逻辑完全取决于开发者。
读取和写入查询在不同的数据库连接中执行,以提高速度
添加了在同一个事务块中执行查询数组的功能,(目前不支持使用参数的查询),这是在除正常读取/写入连接之外的另一个数据库连接中发生的
注意:这些新功能在swift2.3版本中不可用
要运行示例项目,首先克隆仓库,然后从示例目录中运行pod install
最小iOS SDK 8.0
最小tvOS SDK 9.0
SQLiteManager可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中
将SQLite数据库文件拖到项目包中。示例数据库文件名:app_test_database_1
,扩展名:db
pod "SQLiteManager"
import SQLiteManager
class ViewController: UIViewController {
@IBOutlet weak var countLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let database = try! SQLitePool.manager().initialize(database: "app_test_database_1", withExtension: "db")
// on main thread
let result = try! database.query("select count(*) as user_count from tb_user")
if let r = result.results?.first!["user_count"] {
self.countLabel.text = "\(r)"
}
// on background thread
unowned let refSelf = self
database.query("select count(*) as user_count from tb_user", successClosure: { (result) in
if let r = result.results?.first!["user_count"] {
refSelf.countLabel.text = "\(r)"
}
}, errorClosure: { (error) in
print("Database Error",error)
})
//bind values
let dob = Date(timeIntervalSince1970: 3600*24*3650)
let imagePath = URL(fileURLWithPath: Bundle.main.path(forResource: "chamira_fernando", ofType: "jpg")!)
let profilePic = try! Data(contentsOf: imagePath)
let _ = try! database.bindQuery("INSERT INTO 'tb_user' (first_name, last_name, username, date_of_birth, company_id, profile_picture) VALUES (?,?,?,?,?,?)", bindValues: [sqlStr("Chameera"),sqlStr("Fernando"),sqlStr("some_user_name"), sqlNumber(dob.timeIntervalSince1970),sqlNumber(1),sqlData(profilePic)])
//batch
let q1 = "SELECT * FROM tb_user"
let q2 = "SELECT username FROM tb_user"
database.query([q1,q2], successClosure: { (batchResult) in
print("Time taken to proces",batchResult.timeTaken)
for r in batchResult.results {
print("Batch r:",r.results ?? "")
}
}, errorClosure: { (e) in
print(e)
})
}
}
如果您想使用swift 2.3版本,请指向swift2.3分支pod 'SQLiteManager', :git => 'https://github.com/chamira/SQLiteManager.git', :branch => 'swift2.3'
Chamira Fernando,[email protected],Twitter
SQLiteManager 在 MIT 许可协议下可用。更多信息请查看 LICENSE 文件。