Когда использовать SQLITE_TRANSIENT и SQLITE_STATIC?
Я хотел бы создать/обновить текстовые столбцы в sqlite3.
Когда я получаю строки после создания/обновления, текст "?".
Однако значения целых чисел сохраняются.
Мои текстовые заявления выглядят следующим образом:
const char *sql = "INSERT INTO todo(title, description, priority, status, created, expires, posx, posy, updated)"
" VALUES('?', '?', '?', '?', '?', '?', '?', '?', '?');";
if (sqlite3_prepare_v2(database, sql, -1, &insert_statment, NULL) != SQLITE_OK)
...
sqlite3_bind_text(update_statment, 5, [[dt stringFromDate:self.updated] UTF8String], -1, SQLITE_TRANSIENT);
Я пробовал SQLITE_TRANSIENT, а также SQLITE_STATIC. Оба случая, похоже, дают одинаковые результаты ( "?" ). Я также подтвердил, что текстовые значения действительны, когда они передаются в соответствующие операторы sql здесь.
Любые идеи?
Ответы
Ответ 1
Удалить символы вокруг? в вашей строке sql.
SQLITE_TRANSIENT
сообщает SQLite, чтобы скопировать вашу строку. Используйте это, когда ваша строка (буфер) уйдет до выполнения запроса.
SQLITE_STATIC
сообщает SQLite, что вы обещаете, что указатель, который вы передаете в строку, будет действителен до тех пор, пока запрос не будет выполнен. Используйте это, когда ваш буфер, um, статический или, по крайней мере, имеет динамическую область действия, превышающую область привязки.