SQLite.swift(0.11.2 版)示例代码不工作
SQLite.swift (Release 0.11.2) sample code is not working
我正在尝试使用 SQLite.swift 示例代码,但出现错误。
我做的第一步是使用 cocoapods 安装它并且它是成功的。然后我尝试在我的应用程序委托中测试它,我在其中声明导入 SQLite 并在 didFinishLaunchingWithOptions 中添加了以下代码,但它显示错误。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let db = try Connection("path/to/db.sqlite3")
let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")
try db.run(users.create { t in
t.column(id, primaryKey: true)
t.column(name)
t.column(email, unique: true)
})
return true
}
我从此代码行 (let db = try Connection("path/to/db.sqlite3")) 得到的错误是 "Errors thrown from here are not handled"
有没有人遇到同样的问题?我正在使用 XCode 8.2.1 和 Swift 3.0.
您的应用需要知道在出现运行时错误时它应该做什么。您缺少的是函数声明中的 do/catch
子句或 throws
关键字。有关详细信息,请查看 chapter "Error Handling" of the the Swift book.
感谢@martin-r 提供的解决方案。这是更新后的代码。
解决方案:
do {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let db = try Connection("\(documentsPath)/db.sqlite3")
let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")
try db.run(users.create { t in
t.column(id, primaryKey: true)
t.column(name)
t.column(email, unique: true)
})
} catch {
// Handle error
}
我正在尝试使用 SQLite.swift 示例代码,但出现错误。
我做的第一步是使用 cocoapods 安装它并且它是成功的。然后我尝试在我的应用程序委托中测试它,我在其中声明导入 SQLite 并在 didFinishLaunchingWithOptions 中添加了以下代码,但它显示错误。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let db = try Connection("path/to/db.sqlite3")
let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")
try db.run(users.create { t in
t.column(id, primaryKey: true)
t.column(name)
t.column(email, unique: true)
})
return true
}
我从此代码行 (let db = try Connection("path/to/db.sqlite3")) 得到的错误是 "Errors thrown from here are not handled"
有没有人遇到同样的问题?我正在使用 XCode 8.2.1 和 Swift 3.0.
您的应用需要知道在出现运行时错误时它应该做什么。您缺少的是函数声明中的 do/catch
子句或 throws
关键字。有关详细信息,请查看 chapter "Error Handling" of the the Swift book.
感谢@martin-r 提供的解决方案。这是更新后的代码。 解决方案:
do {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let db = try Connection("\(documentsPath)/db.sqlite3")
let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")
try db.run(users.create { t in
t.column(id, primaryKey: true)
t.column(name)
t.column(email, unique: true)
})
} catch {
// Handle error
}