2009-08-04 34 views
16

Chciałbym utworzyć/zaktualizować kolumny tekstu w sqlite3. Po pobraniu wierszy po utworzeniu/aktualizacji, tekst to "?". Wartości całkowite są jednak właściwie przechowywane.Kiedy używać SQLITE_TRANSIENT vs SQLITE_STATIC?

Moje wypowiedzi tekstowych wyglądać następująco:

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); 

Próbowałem SQLITE_TRANSIENT jak SQLITE_STATIC. Oba przypadki wydają się dawać takie same wyniki ("?"). Zweryfikowałem również, że wartości tekstowe są poprawne, gdy są przekazywane do odpowiednich instrukcji sql tutaj.

Wszelkie pomysły?

+0

Jak wygląda twoje przygotowane oświadczenie? –

Odpowiedz

39

Usunąć "znaki dookoła? w twoim ciągu sql.

SQLITE_TRANSIENT mówi SQLite, aby skopiować ciąg znaków. Użyj tego, gdy twój ciąg (bufor) zniknie, zanim zapytanie zostanie wykonane.

mówi SQLite, że obiecujesz, że wskaźnik, który przekażesz do łańcucha, będzie ważny do momentu wykonania kwerendy. Użyj tego, gdy twój bufor jest, um, statyczny lub przynajmniej ma zakres dynamiczny, który przekracza zakres wiązania.

+0

Spróbuję. –

+1

ok. to ma zbyt wiele sensu. duh. Wielkie dzięki! –

Powiązane problemy