2009-08-04 25 views
16

Vorrei creare/aggiornare colonne di testo in sqlite3. Quando recupero le righe dopo la creazione/aggiornamento, il testo è '?'. I valori interi sono comunque persistenti.Quando utilizzare SQLITE_TRANSIENT vs SQLITE_STATIC?

mie dichiarazioni di testo simile a questa:

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

ho provato SQLITE_TRANSIENT così come SQLITE_STATIC. Entrambi i casi sembrano dare gli stessi risultati ('?'). Ho anche verificato che i valori di testo sono validi quando vengono passati nelle istruzioni sql appropriate qui.

Qualche idea?

+0

Che aspetto ha la tua dichiarazione preparata? –

risposta

39

Rimuovere i caratteri intorno? nella stringa sql.

SQLITE_TRANSIENT indica a SQLite di copiare la stringa. Usalo quando il buffer della tua stringa sparirà prima che la query venga eseguita.

SQLITE_STATIC indica a SQLite che si promette che il puntatore passato alla stringa sarà valido fino a dopo l'esecuzione della query. Usalo quando il tuo buffer è, um, statico, o almeno ha scope dinamico che supera quello del binding.

+0

darò una prova. –

+1

ok. questo ha troppo senso. duh. grazie molto! –

Problemi correlati