SDDatabase
SDDatabase 是对著名 FMDB 的简单而强大的包装。它提供了对sqlite数据库操作的高效和简单访问,消除了所有样板代码。用 Swift 编写
SDDatabase
的功能
- 使用简单,提供直接的方法用于
创建
、插入
、更新
、删除
、选择
等……无需为上述操作使用原始查询 - 无需担心多线程,因为每个
SDDatabase
实例都有自己的FMDatabaseQueue
,并且所有包装方法都调用在此队列上。在整个应用程序中创建一个实例单例并使用它。 - 支持事务。
- 能够处理加密数据库文件,使用 SQLCipher
- 无需处理复杂的 resultSet 对象,
SDDatabase
以字典数组的形式返回结果,可以遍历。即[[String : Any]]
- 所有方法都有完整的文档,包括它们的示例用法。
😎
为您的下一个使用 SQLite 的项目选择 SDDatabase
,或者迁移您的现有项目——您会为此而高兴的!
依赖
SDDatabase 依赖于 FMDB 的 FMDB/SQLCipher 子规范。FMDB/SQLCipher 子规范声明 SQLCipher 为依赖项,允许 FMDB 使用 -DSQLITE_HAS_CODEC
标志进行编译。
安装
SDDatabase可通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中
pod 'SDDatabase'
使用
初始化数据库
let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let databasePath = documentDirectoryPath.appending("/testdb.sqlite")
guard let db = Database(withPath: databasePath) else {
print("DB could not be opened")
return
}
如果数据库文件已加密,可以使用带有密钥的init方法
Database(withPath: self.dbPath(), key: "testKey")
您可以使用属性loggingEnabled
控制库是否将任何错误或其他日志记录到控制台
/* Set this to false if you do not want database to log to the console */
db.loggingEnabled = true
create
)
创建表(let studentSchema = " ("
+ "roll_number" + " INT PRIMARY KEY, "
+ "name" + " text"
+ ") "
let creationSuccess = db.create(table: "student", withSchema: studentSchema)
insert
)
向表中插入记录(var studentValues = [String:Any]()
studentValues["roll_number"] = 1
studentValues["name"] = "Sagar"
let insertionSuccess = db.insert(intoTable: "student", values: studentValues)
select
)
从表中选择记录(guard let records = db.select(fromTable: "student", columns: ["roll_number", "name"], whereClause: "name = ?", whereValues: ["Sagar"]) else {
return
}
for record in records {
let rollNumber = record["roll_number"] as! Int
let name = record["name"] as! String
print("Roll number : \(rollNumber), name is \(name)")
}
您还可以将偏移量(offset)和限制(limit)传递给select方法,有关更详细的用法请参阅文档
update
)
更新记录(let updateSuccess = db.update(table: "student", set: ["name" : "Other"], whereClause: "name = ?", whereValues: ["Sagar"])
delete
)
删除记录(let deletionSuccess = db.delete(fromtable: "student", where: "roll_number = ?", whereValues: [1])
drop
)
删除表(let dropSuccess = db.drop(table: "student")
原生查询
该类提供了executeQuery()
和executeUpdate()
方法以执行原生SQL语句。请参阅文档以获取详细用法。
事务管理
该类提供了beginTransaction()
、commitTransaction
、rollback()
和isInTransaction()
方法以处理事务管理。请参阅文档以获取详细用法。
示例
要运行示例项目,首先从示例目录克隆repo,然后运行pod install
。示例项目包括了该库提供所有方法的用法。
作者
Sagar Dagdu, [email protected]
许可
SDDatabase 在 MIT 许可证下可用。请参阅 LICENSE 文件以获取更多信息。
贡献
欢迎所有贡献。请复制项目添加功能,然后在下一版本中提交拉取请求以合并。