Если ваш оператор print
печатает 101
, то есть SQLITE_DONE
, для результата sqlite3_step
, это просто означает, что в таблице нет данных.
Вам следует дважды проверить свой insert
звонков. Казалось бы, вы не вызывали insert
так, как думаете, или этот вызов по какой-то причине не удался. базу данных, а затем перейдите туда в macOS и проверьте, что в ней находится. Вы можете использовать встроенную программу командной строки macOS sqlite3
или использовать сторонний инструмент (например, TablePlus или Base ).
Например, определив путь к моему конкретному экземпляру этого приложения на этом симуляторе, затем я перешел в командную строку, перешел в этот каталог, открыл sqlite3
и подтвердил, что строки, которые я вставил в свой код, появились в таблице:
Or, in TablePlus:
введите описание изображения здесь
Очевидно, я использую person
, как в этом руководстве, но использую любое имя таблицы, которое вы использовали при создании таблицы и вставке данных. И, разумеется, ваш путь для команды cd
будет другим, поэтому выведите свой путь в функции openDatabase
и используйте его для диагностики c.
В вашем примере кода вы используете следующий шаблон кода:
print("\(sqlite3_step(queryStatement)) and \(SQLITE_ROW)")
while sqlite3_step(queryStatement) == SQLITE_ROW {
...
}
Если бы в вашей таблице была одна запись, sqlite3_step
в операторе print
извлек бы ее, а sqlite3_step
в операторе while
затем перейдет к следующей записи, и, поскольку вы сейчас находитесь в конце таблицы, вы выйдете из l oop. В итоге вы пропускаете первую строку в своих результатах с помощью этого дополнительного вызова sqlite3_step
в операторе print
.
Удалите этот оператор print
. Или, если вы хотите его распечатать, убедитесь, что вы не вводите посторонние звонки sqlite3_step
. Например, вы можете сделать:
var rc = sqlite3_step(statement)
while rc == SQLITE_ROW {
print("row", rc)
...
rc = sqlite3_step(statement)
}
print("done", rc)
if rc != SQLITE_DONE {
// print the error
}