본문 바로가기

DATABASE/sqlite

[sqlite] sqlite_bind_text() (blob, text16...) 인자 값


sqlite_bind_text(), sqlite_bind_text16(), sqlite_bind_blob() 

의 세 함수는 다른 바인드 함수보다 파라메터의 수가 좀더 많다.


텍스트를 기준으로 원형은

int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));

이다.


여기서 첫번째 인자는 statement 핸들이다.


두번째 인자는 데이터가 들어갈 순서이다.

~~~ values(?,?,?,?) 식으로 구성이 되어있을때 맨 좌측 ?표가 1번째 물음표이다. 두번째 인자가 3 이라면 맨좌측으로부터 세번째 ?표에 데이터를 넣으라는 뜻.


세번째 인자는 db에 넣을 데이터 이다.


네번째 인자는 세번째에서 지정한 데이터의 크기를 정한다. -1(음수)를 넣으면 전체 데이터를 넣는다.


다섯번째 인자는 특별한 인자 이다.

들어가는 값으로 SQLITE_STATIC 과 SQLITE_TRANSIENT가 있다.

SQLITE_STATIC의 경우 바인딩 되는 변수를 static변수(free가 될 일이 없는)로 사용한다는 의미 이다.

변수가 중간에 변경되거나 메모리가 해제 되면 문제가 발생할 수 있다.


SQLITE_TRANSIENT는 바인딩 변수가중간에 변경이 될 수도 있기에 해당 변수값을 복사하여 사용한다. 중간에 변수가 변경이 되어도 복사한 값으로 사용되기에 문제없다.

다만 복사과정이 들어가기에 안전하나 SQLITE_STATIC 보다는 속도가 느리다