2009-08-04 14 views
16

Ich möchte Textspalten in sqlite3 erstellen/aktualisieren. Wenn ich Zeilen nach der Erstellung/Aktualisierung abrufe, lautet der Text "?". Integer-Werte werden jedoch ordnungsgemäß beibehalten.Wann SQLITE_TRANSIENT vs SQLITE_STATIC verwenden?

Mein Text-Anweisungen wie folgt aussehen:

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

Ich habe versucht, SQLITE_TRANSIENT sowie SQLITE_STATIC. Beide Fälle scheinen dieselben Ergebnisse zu liefern ("?"). Ich habe auch überprüft, dass die Textwerte gültig sind, wenn sie in die entsprechenden SQL-Anweisungen hier übergeben werden.

Irgendwelche Ideen?

+0

Wie sieht Ihre vorbereitete Aussage aus? –

Antwort

39

Entfernen Sie die Zeichen herum? in Ihrer SQL-Zeichenfolge.

SQLITE_TRANSIENT weist SQLite an, Ihre Zeichenfolge zu kopieren. Verwenden Sie dies, wenn der String (der Puffer) verschwindet, bevor die Abfrage ausgeführt wird.

SQLITE_STATIC teilt SQLite mit, dass Sie versprechen, dass der Zeiger, den Sie an die Zeichenfolge übergeben, gültig ist, nachdem die Abfrage ausgeführt wurde. Verwenden Sie diese Option, wenn der Puffer "um" oder "statisch" ist oder mindestens über einen dynamischen Bereich verfügt, der den der Bindung übersteigt.

+0

Ich werde es versuchen. –

+1

ok. Das macht zu viel Sinn. Duh. Danke vielmals! –

Verwandte Themen