DatabaseCursor
A cursor that lazily iterates the results of a prepared Statement
.
protocol DatabaseCursor<Element> : Cursor
Browse conforming typesOverview
To get a DatabaseCursor
instance, use one of the fetchCursor
methods. For example:
A cursor of
Row
built from a preparedStatement
:try dbQueue.read { db in let statement = try db.makeStatement(sql: "SELECT * FROM player") let rows = try Row.fetchCursor(statement) while let row = try rows.next() { let id: Int64 = row["id"] let name: String = row["name"] } }
A cursor of
Int
built from an SQL string (seeDatabaseValueConvertible
):try dbQueue.read { db in let sql = "SELECT score FROM player" let scores = try Int.fetchCursor(db, sql: sql) while let score = try scores.next() { print(score) } }
A cursor of
Player
records built from a request (seeFetchableRecord
andFetchRequest
):try dbQueue.read { db in let request = Player.all() let players = try request.fetchCursor(db) while let player = try players.next() { print(player.name, player.score) } }
A database cursor is valid only during the current database access (read or write). Do not store or escape a cursor for later use.
A database cursor resets its underlying prepared statement with sqlite3_reset
when the cursor is created, and when it is deallocated. Don’t share the same prepared statement between two cursors!