21

sqlite3 でテキスト列を作成/更新したいと考えています。作成/更新後に行を取得すると、テキストは「?」になります。ただし、整数値は適切に保持されます。

私のテキストステートメントは次のようになります。

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

SQLITE_TRANSIENT と SQLITE_STATIC を試しました。どちらの場合も同じ結果が得られるようです ('?')。また、テキスト値が適切な SQL ステートメントに渡されたときに有効であることも確認しました。

何か案は?

4

1 に答える 1

48

前後の ' 文字を削除します。あなたのSQL文字列で。

SQLITE_TRANSIENT文字列をコピーするよう SQLite に指示します。これは、クエリが実行される前に文字列 (のバッファー) がなくなる場合に使用します。

SQLITE_STATIC文字列に渡すポインターがクエリの実行後まで有効であることを約束することを SQLite に伝えます。これは、バッファーが静的であるか、少なくともバインディングのスコープを超える動的スコープを持っている場合に使用します。

于 2009-08-04T18:53:34.180 に答える