GRDBドキュメントsays:
データベース接続を許可されたら、execute
方法はSQLを実行CREATE TABLE、INSERT、DELETE、ALTERなどのデータベース行を返さない文。
行をフェッチしたい場合は、間違った方法を選択しました。
ローをフェッチするには、Row Queriesドキュメントの章に記載されているフェッチ方法(fetch
で始まる)を使用することをお勧めします。例えば
:
let rows = try dbQueue.inDatabase { db in
try Row.fetchAll(db, "SELECT * FROM games")
}
// Now we're back to the main thread: use rows:
for row in rows {
let name: String = row.value(named: "name")
let year: Int = row.value(named: "year")
print(name)
print(year)
}
それは "モデルを経由せず" を与えるものです。しかし
モデルはまだ便利です:あなたはゲームの種類(構造体やクラス)がRowConvertibleプロトコルを採用してい
let games = try dbQueue.inDatabase { db -> [Game] in
let rows = try Row.fetchAll(db, "SELECT * FROM games")
return rows.map { row in
Game(
name: row.value(named: "name"),
year: row.value(named: "year"))
}
}
// Now we're back to the main thread: use games
for game in games {
print(game.name)
print(game.year)
}
場合、あなたも書き込むことができます。
let games = try dbQueue.inDatabase { db in
try Game.fetchAll(db, "SELECT * FROM games")
}
そして、ゲームにも採用している場合TableMappingプロトコルでは、
ドキュメントについては、Recordを参照してください。それらのプロトコルの
こんにちは、 私は説明に時間をとっていただき、ありがとうございます。 実際、データベースに接続する際に問題が発生しました(これは自動化のためのクラスではありません:相対パスまたは絶対パス)。正しい方法はありませんでした。 あなたの説明は、私の全時間がフレームワークを理解するのに大いに役立った。 もう一度ありがとうございます。 – yave