Получить последнюю строку в быстром цикле с помощью SQLite.swift

Как я могу проверить последнюю строку в этом цикле ниже. Я использую SQlite.swift для циклического просмотра всех строк в таблице. Когда я доберусь до последней строки, я хочу что-то сделать.

    for data in try dbConnection.prepare(tableName) {
        if (thisIsTheLastRow) {
          //do something
         }
}

Вот ссылка на библиотеку, но я не смог найти ничего о получении определенных индексов через цикл


person plgelso    schedule 25.05.2017    source источник


Ответы (2)


Вы можете либо сделать for index loop:

let count = try! db.scalar("SELECT count(*) FROM Table") as! Int64
for (index, data) in stmt.enumerated() {
    if index == Int(count)  {
        // Last row

    }
}

Или вы можете в этой библиотеке сделать оператор sqlite и сразу получить последнюю строку:

func lastRowForTable() -> Data {
   let data = try! db.scalar("SELECT * FROM table ORDER BY column DESC LIMIT 1;")
   return data
}
person Rashwan L    schedule 25.05.2017
comment
Цикл for index - это то, что мне нужно использовать, потому что я делаю другие вещи в цикле, когда это не последняя строка. Я действительно ценю твою помощь. Когда я пробиваю первый цикл, я получаю сообщение об ошибке в значении Xcode типа «EnumeratedSequence‹AnySequence‹Row››» не имеет члена «count» @Rashwan L. - person plgelso; 25.05.2017
comment
@plgelso, проверьте обновленный пример для итерации индекса. - person Rashwan L; 25.05.2017
comment
Убедитесь, что все ваши операторы заключены в транзакцию, иначе другой поток может изменить базу данных между ними. - person Gwendal Roué; 26.05.2017

SQLite вычисляет строки результатов по запросу. Таким образом, нет никакого способа узнать, является ли текущая строка последней, кроме как попытаться перейти к следующей.

Вы должны загрузить все строки, прежде чем зацикливаться на них, или сделать что-то "сделать что-то" после цикла.

person CL.    schedule 25.05.2017