2009-08-04 3 views
16

sqlite3에서 텍스트 열을 작성/업데이트하고 싶습니다. 작성/업데이트 후 행을 검색 할 때 텍스트는 '?'입니다. 그러나 정수 값은 올바르게 유지됩니다.SQLITE_STANTIC 대 SQLITE_TRANSIENT를 사용하는 경우?

내 텍스트 문은 다음과 같이 :

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_STATIC뿐만 아니라 SQLITE_TRANSIENT을 시도했습니다. 두 경우 모두 같은 결과를 나타냅니다 ('?'). 또한 적절한 SQL 문으로 전달 될 때 텍스트 값이 유효한지 확인했습니다.

아이디어가 있으십니까?

+0

준비된 성명은 어떻게됩니까? –

답변

39

'문자를 제거 하시겠습니까? 귀하의 SQL 문자열에.

SQLITE_TRANSIENT은 문자열을 복사하도록 SQLite에 지시합니다. 쿼리가 실행되기 전에 문자열 (버퍼)이 사라질 때 이것을 사용하십시오.

SQLITE_STATIC는 쿼리가 실행될 때까지 문자열로 전달한 포인터가 유효하다는 것을 약속한다는 것을 SQLite에 알립니다. 버퍼가 um, static, 또는 적어도 바인딩의 다이나믹 스코프를 넘는 경우에 사용하십시오.

+0

나는 이것을 시도 할 것이다. –

+1

확인. 이것은 너무 많은 의미가 있습니다. 이런. 많은 감사합니다! –

관련 문제