2009-08-04 19 views
16

Me gustaría crear/actualizar columnas de texto en sqlite3. Cuando recupero filas después de la creación/actualización, el texto es '?'. Sin embargo, los valores enteros se conservan correctamente.Cuándo usar SQLITE_TRANSIENT vs SQLITE_STATIC?

Mis declaraciones texto siguiente aspecto:

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

he tratado SQLITE_TRANSIENT, así como SQLITE_STATIC. Ambos casos parecen arrojar los mismos resultados ('?'). También he verificado que los valores de texto son válidos cuando se pasan a las sentencias sql apropiadas aquí.

¿Alguna idea?

+0

¿Cómo se ve tu frase preparada? –

Respuesta

39

Eliminar los 'caracteres de alrededor? en tu cadena sql.

SQLITE_TRANSIENT le dice a SQLite que copie su cadena. Úselo cuando su cadena ('buffer') vaya a desaparecer antes de que se ejecute la consulta.

SQLITE_STATIC dice SQLite que promete que el puntero se pasa a la cadena será válida hasta que se ejecuta la consulta. Use esto cuando su búfer esté, por ejemplo, estático, o al menos tenga un alcance dinámico que exceda el del enlace.

+0

voy a intentar esto. –

+1

bien. esto tiene mucho sentido. duh. ¡muchas gracias! –

Cuestiones relacionadas