SELECT * ведет себя странно — Swift SQLite FMDB

У меня есть таблица TEST, которая ведет себя странно. Он просто состоит из двух целых чисел: ID (автоматическое увеличение) и LOCATIONSELECTED.

Таблица заполнена

1, 99
2, 100
3, 101
etc

Если я попытаюсь найти LOCATIONSELECTED, используя приведенный ниже код, он сработает и вернет 99!

func getTestSelectedRecord() {
    sharedInstance.database!.open()
    var sqlStatement = "SELECT * FROM TEST WHERE ID = 1"
    var resultSet: FMResultSet! = sharedInstance.database!.executeQuery(sqlStatement, withArgumentsInArray: nil)
    if (resultSet != nil) {
        while resultSet.next() {
            let getRecordID = resultSet.intForColumn("LOCATIONSELECTED")
            NSLog("DatabaseFunctions - TEST - GET - getRecordID = %i", getRecordID)
        }
    }
    sharedInstance.database!.close()
}

Но если я удалю цикл while, он вернет nul. Обычно я пишу свои вызовы SELECT без вызовов if != nil и while вообще. В таблице есть только одна запись с идентификатором 1.

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


person Edward Hasted    schedule 26.07.2015    source источник
comment
Вам нужно вызвать resultSet.next(), чтобы получить первый результат. Вы удаляете его с помощью предложения while?   -  person Antoniossss    schedule 26.07.2015


Ответы (1)


Вы можете удалить цикл while, но вы должны сохранить:

resultSet.next();

оператор, так как это операция, которая позволяет получить доступ к первой (и единственной) записи результата.

person Renzo    schedule 26.07.2015
comment
Итак, исходный вызов не приводит вас к первой (и единственной) строке? Это resultSet.next() указывает вам на это. - person Edward Hasted; 26.07.2015
comment
Да, исходный вызов только подготавливает результат для чтения. На жаргоне базы данных это курсор, поэтому вам нужно каким-то образом открыть его, прежде чем использовать записи, возвращаемые запросом. - person Renzo; 26.07.2015