# 1 - как заполнить поле Date как допустимую временную метку SQLite?
SQLite3 не имеет ни типа DATETIME, ни типа TIMESTAMP.Таким образом, вам нужно сохранить временную метку в виде ТЕКСТА или ЧИСЛА.
Когда вы выбираете ЧИСЛО, вам лучше использовать время эпохи UNIX.
sqlite3_bind_double(insertStatement, 2, Date().timeIntervalSince1970)
# 2
Swift выделяет временную область для хранения представления UTF-8 при передаче String параметру типа UnsafePointer<Int8>
.И регион освобождается сразу после вызова функции и может быть использован повторно.
Попробуйте это:
sqlite3_bind_text(insertStatement, 3, strdup(strVar1), -1, free)
sqlite3_bind_text(insertStatement, 4, strdup(strVar2), -1, free)
strdup
выделяет стабильный регион, который доступен до free
d.
Или (благодаря rmaddy и Martin R "SQLITE_TRANSIENT не определен в Swift" ) вы можете использовать SQLITE_TRANSIENT
.
Определить где-нибудь в вашем коде:
let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
и используйте его:
sqlite3_bind_text(insertStatement, 3, strVar1, -1, SQLITE_TRANSIENT)
sqlite3_bind_text(insertStatement, 4, strVar2, -1, SQLITE_TRANSIENT)