• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 서비스
    • MySQL유지보수
    • MySQL라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.1 한글메뉴얼) [close]
  • 1. MySQL 5.1 Reference Manual
  • 2. Installing and MySQL 업그레이드하기
  • 3. 사용 설명서 (Tutorial)
  • 4. MySQL 프로그램 사용하기
  • 5. 데이터베이스 관리
  • 6. 리플리케이션
  • 7. 최적화 (Optimization)
  • 8. 클라이언트 및 유틸리티 프로그램
  • 9. 언어 구조 (Language Structure)
  • 10. 문자 셋 지원
  • 24. API 및 라이브러리
  • 1. libmysqld, 임베디드 MySQL 서버 라이브러리
    2. MySQL C API
    1. C API 데이터 타입
    2. C API 함수 개요
    3. C API 함수 상세 내용
    4. C API 프리페어드 명령문
    5. C API 프리페어드 명령문 데이터 타입
    6. C API 프리페어드 명령문 함수 개요
    7. C API 프리페어드 명령문 함수 상세 내용
    8. C API 프리페어드 명령문의 문제점
    9. C API 멀티 명령문 실행
    10. C API 데이터 및 타입 값 처리
    11. C API 쓰레드 함수 상세 내역
    12. C API 임베디드 서버 함수 상세 내역
    13. 자동 재 접속 동작 제어
    14. C API를 사용할 때 자주 발생하는 문제점
    15. 클라이언트 프로그램 구축하기
    16. 쓰레디드 클라이언트 만들기
    3. MySQL PHP API
    4. MySQL Perl API
    5. MySQL C++ API
    6. MySQL Python API
    7. MySQL Tcl API
    8. MySQL Eiffel Wrapper
    9. MySQL프로그램 개발 유틸리티
  • 25. Connectors

24.2.10. C API 데이터 및 타입 값 처리

 

바이너리 (프리페어드 명령문) 프로토콜은 MYSQL_TIME 구조를 사용해서 데이터와 시간 값 (DATE, TIME, DATETIME, 그리고 TIMESTAMP)를 전송하고 전달받을 수 있도록 한다.

임시 데이터 값을 전송하기 위해서는, mysql_stmt_prepare()를 사용해서 프리페어드 명령문을 생성한다. 그런 다음에, 명령문을 실행하기 위한 mysql_stmt_execute() 호출 이전에 각각의 임시 파라미터를 설정하기 위한 다음 과정을 진행한다:

 

1.     데이터 값과 관련된 MYSQL_BIND 구조에서, 전송할 임시 값의 종류를 가리키기 위한 buffer_type 멤버를 설정한다. DATE, TIME, DATETIME, 또는 TIMESTAMP 값의 경우에는 buffer_type을 MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME, 또는 MYSQL_TYPE_TIMESTAMP에 설정한다.

2.     MYSQL_BIND 구조의 buffer 멤버에 임시 값을 전달할 MYSQL_TIME 구조의 주소를 설정한다.

3.     전달할 임시 값에 적당한 타입용 MYSQL_TIME 구조 멤버를 채워 넣는다.

 

파라미터 데이터를 명령문에 바인딩할 때에는 mysql_stmt_bind_param()를 사용한다. 그런 후에 mysql_stmt_execute()를 호출한다.

임시 값을 추출하는 과정 역시 위와 비슷하지만, 추출하고자 하는 값의 타입으로 buffer_type 멤버를 설정하고, buffer 멤버는 리턴된 값이 들어갈 MYSQL_TIME 구조를 설정한다. mysql_stmt_execute()를 호출한 후 그리고 결과를 가져오기 전에 mysql_bind_results()를 사용해서 버퍼를 명령문에 바인딩한다.

아래의 예문을 보도록 하자:

 

  MYSQL_TIME  ts;

  MYSQL_BIND  bind[3];

  MYSQL_STMT  *stmt;

 

  strmov(query, "INSERT INTO test_table(date_field, time_field, \

                               timestamp_field) VALUES(?,?,?");

 

  stmt = mysql_stmt_init(mysql);

  if (!stmt)

  {

    fprintf(stderr, " mysql_stmt_init(), 메모리 부족\n");

    exit(0);

  }

  if (mysql_stmt_prepare(mysql, query, strlen(query)))

  {

    fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");

    fprintf(stderr, "\n %s", mysql_stmt_error(stmt));

    exit(0);

  }

 

  /* set up input buffers for all 3 parameters */

  bind[0].buffer_type= MYSQL_TYPE_DATE;

  bind[0].buffer= (char *)&ts;

  bind[0].is_null= 0;

  bind[0].length= 0;

  ...

  bind[1]= bind[2]= bind[0];

  ...

 

  mysql_stmt_bind_param(stmt, bind);

 

  /* supply the data to be sent in the ts structure */

  ts.year= 2002;

  ts.month= 02;

  ts.day= 03;

 

  ts.hour= 10;

  ts.minute= 45;

  ts.second= 20;

 

  mysql_stmt_execute(stmt);

  ..

 

서울시 강남구 영동대로 602 6층  TEL: 02-6061-0006
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved