Подтвердить что ты не робот

Когда использовать 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 здесь.

Любые идеи?

4b9b3361

Ответ 1

Удалить символы вокруг? в вашей строке sql.

SQLITE_TRANSIENT сообщает SQLite, чтобы скопировать вашу строку. Используйте это, когда ваша строка (буфер) уйдет до выполнения запроса.

SQLITE_STATIC сообщает SQLite, что вы обещаете, что указатель, который вы передаете в строку, будет действителен до тех пор, пока запрос не будет выполнен. Используйте это, когда ваш буфер, um, статический или, по крайней мере, имеет динамическую область действия, превышающую область привязки.