SQLite.Swift 版本有效。使用 GRDB 版本时,应用程序崩溃,我收到以下错误。线程 1:致命错误:数据库方法不可重入。
我在 GRDB 版本上做错了什么。
这是 SQLite.Swift 版本。
static func getCommon_CategoryXX(trick_Category_XRef_Table: String, category_Table: String, trickID: Int64) -> String
{
let trick_Type_XRef_Table = Table(trick_Category_XRef_Table)
let type_ID_Trick_XRef = Expression<Int64>("Type_ID")
let trick_ID_Type_XRef = Expression<Int64>("Common_ID")
let itemTypse_Table = Table(category_Table)
let itemID = Expression<Int64>("ItemID")
let itemName = Expression<String>("Item_Name")
var categoty_Name: String = ""
let theQuery = trick_Type_XRef_Table.join(.inner, itemTypse_Table, on: itemID == type_ID_Trick_XRef).filter(trick_ID_Type_XRef == trickID).select(itemName)
do {
for theName in try Database.shared.databaseConnection!.prepare(theQuery)
{
categoty_Name = theName[itemName]
}
} catch {
print("Couldn't get the category type name! \(category_Table) \(error)")
}
// print(categoty_Name)
// print("Cat XRef Table \(trick_Category_XRef_Table)")
// print("Cat Table \(category_Table)")
return categoty_Name
}
这就是我所拥有的 GRDB 版本。
static func getCommon_Category(trick_Category_XRef_Table: String, category_Table: String, trickID: Int64) -> String {
var categoty_Name: String = ""
do {
try Database_GRDB.shared.databaseConnection!.read { db in
categoty_Name = try (String.fetchOne(db, sql: "SELECT Item_Name FROM " + category_Table + " INNER JOIN " + trick_Category_XRef_Table + " ON ItemID = Type_ID WHERE Common_ID = ?", arguments: [trickID]) ?? "")
}
} catch {
print("Couldn't get the category type name! \(category_Table) \(error)")
}
// print(categoty_Name)
// print("Cat XRef Table \(trick_Category_XRef_Table)")
// print("Cat Table \(category_Table)")
return categoty_Name
}