vc++에서 bytea형을 인서트 하려하는데 어떻게 사용하는지요?
정수형이나 문자열은 아래와 같이 사용했는데
sprintf(g_dbcall,"insert into login values(%d,'%s')",num1,hannum);
g_res = PQexec(g_pgconn,g_dbcall);
PQescapeByteaConn함수를 사용해서 인서트할 bytea를 변환해서 사용하나요
상세한 예제를 한번 보고 싶은데요?
bytea 자료형을 사용하는 경우에는
그 이진 자료를 insert into 구문으로 데이터베이스에 집어넣으려면,
궁극적으로는 쿼리 문자열을 만들고, 그 문자열을 PQexec()함수의 입력값으로 사용합니다.
이때 이진 자료를 쿼리 문자열로 만드려고 할 때 PQescapeByteaConn()함수를 사용합니다.
C 용 pseudo 코드를 대략적으로 작성하면,
unsigned char *bindata, *escape_bindata; // 변수 선언하고,
size_t bin_len, esc_len;
filehandle = open(파일); // 파일 열고
malloc(bindata); // 메모리 할당
malloc(escape_bindata); // 메모리할당 일때는 bindata의 세배정도 잡으면 넉넉합니다.
bindata = read(filehandle); // 파일 읽어 bindata 넣고,
close(filehandle); // 파일 닫고,
escape_bindata = PQescapeByteaConn(conn, bindata, bin_len, &esc_len); // 쿼리용 데이터로 만들고,
sprintf(...)// 형태로 쿼리를 만들고,
PQexec(...)// 쿼리 실행하고,
PQfreemem() // 사용했던 메모리들 정리하고
이런식으로 될 것 같네요.
VC++이라면, 좀더 사용하기 편한 std 라이브러리의 클래스들을 사용하면 코드가 깔끔해지겠죠.
요지는 데이터베이스쪽으로 보내는 쿼리는 문자열이다고 이해하면 됩니다.
DB에 있는 bytea 자료를 꺼집어 낼 때는
그 반대 작업을 하면 되겠죠.
실재 예제는
http://postgresql.kr/docs/9.2/libpq-example.html
페이지에서 간단하게 언급하고 있습니다.
검색엔진에서
libpq bytea sample, example 같은 검색어로 찾으면 몇가지 더 나오겠죠.