2009-08-04 7 views
16

Je voudrais créer/mettre à jour des colonnes de texte dans sqlite3. Lorsque je récupère des lignes après la création/mise à jour, le texte est '?'. Les valeurs entières sont correctement conservées.Quand utiliser SQLITE_TRANSIENT vs SQLITE_STATIC?

Mes déclarations texte ressemblent à ceci:

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

J'ai essayé SQLITE_TRANSIENT ainsi que SQLITE_STATIC. Les deux cas semblent donner les mêmes résultats ('?'). J'ai également vérifié que les valeurs de texte sont valides lorsqu'elles sont passées dans les instructions sql appropriées ici.

Des idées?

+0

À quoi ressemble votre instruction préparée? –

Répondre

39

Supprimer les 'caractères autour? dans votre chaîne SQL.

SQLITE_TRANSIENT indique à SQLite de copier votre chaîne. Utilisez ceci quand votre chaîne (la mémoire tampon) va disparaître avant que la requête soit exécutée.

SQLITE_STATIC indique à SQLite que vous promettez que le pointeur que vous passez à la chaîne sera valide jusqu'à ce que la requête soit exécutée. Utilisez-le lorsque votre tampon est, um, statique, ou a au moins une portée dynamique qui dépasse celle de la liaison.

+0

je vais essayer. –

+1

ok. Cela fait trop de sens. duh. Merci beaucoup! –

Questions connexes