database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9286 게시물 읽기
No. 9286
bytea를 PQescapeByteaConn함수 사용한 예제 없나요?
작성자
심상호(shimsh)
작성일
2013-05-31 02:10
조회수
10,494

vc++에서 bytea형을 인서트 하려하는데 어떻게 사용하는지요?

정수형이나 문자열은 아래와 같이 사용했는데

sprintf(g_dbcall,"insert into login values(%d,'%s')",num1,hannum);

g_res = PQexec(g_pgconn,g_dbcall);

PQescapeByteaConn함수를 사용해서 인서트할 bytea를 변환해서 사용하나요

상세한 예제를 한번 보고 싶은데요?

이 글에 대한 댓글이 총 1건 있습니다.

 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 같은 검색어로 찾으면 몇가지 더 나오겠죠.

 

 

 

 

김상기(ioseph)님이 2013-05-31 11:19에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9290다중 테이블 내용으로 업데이트를 할 경우! [3]
souler
2013-06-06
9094
9289제약조건 검사와 입력 실패시 리턴되는게 있을까요? [1]
VQ
2013-06-05
9972
9288index컬럼 type casting [1]
김민석
2013-06-04
8829
9286bytea를 PQescapeByteaConn함수 사용한 예제 없나요? [1]
심상호
2013-05-31
10494
9285완전초보의 pg_connect 질문 [2]
정성모
2013-05-29
8997
9284불완전한 테이블 제약조건에 대해서 [8]
souler
2013-05-27
9124
9283vacuum실행 후 속도저하 [2]
왕초보
2013-05-27
9320
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.038초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다