'2011/07/11'에 해당되는 글 3건
- 2011.07.11 mysql_real_connect() - MySQL 데이터베이스 연결
- 2011.07.11 mysql_config명령을 이용한 MySQL C API 컴파일
- 2011.07.11 MySQL C API 데이터 타입 1
mysql_real_connect() - Mysql 데이터베이스 엔진으로 연결 시도. |
|
형태 & 인수 |
MYSQL *mysql_real_connect( MYSQL *mysql, /* MYSQL 구조의 어드레스 */ const char *host, /* 호스트 이름 또는 IP 어드레스 (default = localhost) */ const char *user, /* MySQL Login ID (default = 현재 로그인 이름) */ const char *passwd, /* 패스워드 (default = none) */ const char *db, /* 데이터베이스 이름 (default = none) */ unsigned int port, /* TCP/IP 연결 포트 (use default) */ const char *unix_socket, /* 소켓 (use default) */ unsigned long client_flag) /* flag (none) */ |
리턴 값 |
성공 : MYSQL* 연결 핸들 (= 첫 번째 파라미터) 실패 : NULL |
사용자가 유효한 MYSQL 연결 핸들 구조를 요구하는 다른 어떤 API 함수를 실행할 수 있기 전에 성공적으로 완료되어야 한다. |
▶ client_flag 값은 대체로 0이다. 그러나 정확한 기능을 작동하기 위해 다음 플래그의 조합으로 설정될 수 있다:
플래그(Flag) 이름 |
플래그(Flag) 설명 |
CLIENT_COMPRESS |
압축 프로토콜 사용. |
CLIENT_FOUND_ROWS |
변경된 로우의 숫자가 아니라 찾은(맞는) 로우들의 숫자를 리턴. |
CLIENT_IGNORE_SPACE |
함수 이름 후에 공간 허용. 모든 함수 이름을 예비의 단어로 만듦. |
CLIENT_INTERACTIVE |
interactive_timeout 초 허용 (wait_timeout 초대신에) of inactivity before closing the connection. 클라이언트 세션 wait_timeout 변수는 세션 interactive_timeout 변수 값으로 설정. |
CLIENT_LOCAL_FILES |
LOAD DATA LOCAL 조정 가능. |
CLIENT_MULTI_STATEMENTS |
싱글 문자열 (';'로 나눠진)에서 클라이언트가 다중(멀티) 명령문을 보내도록 서버에 전달. 만약 이 플래그가 설정되어 있지 않다면, 멀티-명령문 실행은 불가능하다. |
CLIENT_MULTI_RESULTS |
클라이언트가 멀티-명령문 실행 또는 스토어드 프로시저로부터 멀티 결과 셋을 조정할 수 있다는 것을 서버에 전달. CLIENT_MULTI_STATEMENTS이 설정되어 있다면, 이것은 자동적으로 설정. |
CLIENT_NO_SCHEMA |
db_name.tbl_name.col_name 신텍스를 허용하지 않음. 이것은 ODBC용이다. ODBC 프로그램에곤란한 버그에 사용하는 신텍스를 사용할 경우, parser(쿼리문 분석기)가 에러를 출력하도록 한다. |
CLIENT_ODBC |
원격 데이터베이스를 사용할 때 ODBC를 사용하고 있는지 확인할 수 있다. |
CLIENT_SSL |
SSL 사용. 이 옵션은 어플리케이션 프로그램으로 설정될 수 없다; 이것은 내부적으로 클라이언트 라이브러리 내에 설정된다. mysql_real_connect()함수를 호출하기 전에mysql_ssl_set()함수를 사용. |
[ 에러 ] |
|
CR_CONN_HOST_ERROR |
MySQL 서버로의 연결 실패. |
CR_CONNECTION_ERROR |
로컬 MySQL 서버로의 연결 실패 |
CR_IPSOCK_ERROR |
IP소켓 생성 실패. |
CR_OUT_OF_MEMORY |
메모리 부족. |
CR_SOCKET_CREATE_ERROR |
유닉스 소켓 생성 실패. |
CR_UNKNOWN_HOST |
호스트 이름 용 IP 어드레스 찾기 실패. |
CR_NAMEDPIPEOPEN_ERROR |
윈도우에서 명명된 파이프 생성 실패 |
CR_NAMEDPIPEWAIT_ERROR |
윈도우에서 명명된 파이프 대기(wait for) 실패. |
CR_NAMEDPIPESETSTATE_ERROR |
윈도우에서 파이프 핸들러(조정자) 획득 실패 |
CR_SERVER_LOST |
connect_timeout > 0 이고 서버에 연결하는데 connect_timeout 초 보다 오래 걸리면 또는 서버가 or init-command을 실행하는 동안 죽는다면 실패. |
[ 예제 ]
#include <stdio.h> #include <stdlib.h> #include <mysql.h> #define def_host_name NULL /* host to connect to (default = localhost) */ #define def_user_name "rick" /* user name (default = your login name) "*/ #define def_password "bar" /* password (default = none) */ #define def_db_name NULL /* dtabases to use (default = none) */ #define def_port_num 0 /* use default port */ #define def_socket_name NULL /* use default socket name */ MYSQL my_conn; /* pointer to connection handler */ int main(int argc, char *argv[]) { mysql_init(&my_conn); if ( mysql_real_connect ( &my_conn, /* pointer to connection handler */ def_host_name, /* host to connect to */ def_user_name, /* user name */ def_password, /* password */ def_db_name, /* database to use */ def_port_num, /* port (use default) */ def_socket_name, /* socket (use default) */ 0) /* flags (none) */ ) { printf("Connection success\n"); } else { fprintf(stderr, "Failed to connect to databases: Error: %s\n", mysql_error(&my_conn)); } mysql_close(&my_conn); return EXIT_SUCCESS; }
'API 및 라이브러리 > MySQL C API' 카테고리의 다른 글
MySQL C API - 오류처리 (mysql_errno, mysql_error) (0) | 2011.07.12 |
---|---|
mysql_options() - 연결 옵션을 설정 (0) | 2011.07.12 |
mysql_config명령을 이용한 MySQL C API 컴파일 (0) | 2011.07.11 |
MySQL C API 데이터 타입 (1) | 2011.07.11 |
MySQL C API 함수 개요 (0) | 2011.07.10 |
♧ mysql_config는 MySQL 클라이언트를 컴파일링하고
그것을 MySQL로 연결하는데 필요한 유용한 정보를 제공한다.
▶ mysql_config 옵션:
옵션 | 설명 |
--cflags | 찾는 컴파일러 프래그들은 파일과 핵심 컴파일러 플래그들을 포함하며, libmysqlclient 라이브러리를 컴파일 할 때 사용된 정의한다. |
--include | MySQL을 찾는 컴파일러 옵션은 파일을 포함한다. (이 옵션 대신에 일반적으로 Note --cflags 을 사용한다는 것을 명심하라.) |
--libs | MySQL 클라이언트 라이브러리로 링크하기 위해 요구되는 라이브러리들과 옵션들. |
--libs_r | 스레드에 안전한 MySQL 클라이언트 라이브러리로 링크하기 위해 요구되는 라이브러리와 옵션. |
--plugindir | 플러그인 디렉토리. |
--socket | MySQL 설정 시 정의된 디폴트 유닉스 소켓 파일. |
--port | MySQL 설정 시 정의된 디폴트 TCP/IP 포트 넘버. |
--version | MySQL 버전 숫자. |
--libmysqld-libs | MySQL 임베디드 서버로 링크하기 위해 요구되는 라이브러리들과 옵션들. |
▶ 옵션없이 mysql_config 실행하면 지원하는 옵션과 그 값들의 리스트를 보여준다.
shell> mysql_config Usage: /usr/bin/mysql_config [OPTIONS] Options: ■■■--cflags■■■[-I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX] ■■■--include■■[-I/usr/include/mysql] ■■■--libs■■■■[-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient] ■■■--libs_r■■■[-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient_r] ■■■--plugindir■[/usr/lib/mysql/plugin] ■■■--socket■■[/var/run/mysqld/mysqld.sock] ■■■--port■■■■[0] ■■■--version■■[5.1.41] ■■■--libmysqld-libs■[-Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqld -ldl -lwrap -lrt] |
▶ 쉘 프롬프트 창에서 MySQL 클라이언트 프로그램 컴파일 예:
shell> CFG=/usr/local/mysql/bin/mysql_config shell> sh -c "gcc -o progname `$CFG --cflags` progname.c `$CFG --libs`" |
이런 방법으로 mysql_config을 사용할 때, 백틱(backtick / '`') 캐릭터 내에서 그것을 실행해야 한다.
그것은 쉘(shell)이 그것을 실행하도록 명령하며, 그 아웃풋을 주변 명령문에 대신 넣는다.
▶ make를 이용한 MySQL 클라이언트 프로그램 컴파일 예:
Makefile 작성 |
CC = gcc CFLAGS = -Wall $(shell mysql_config --cflags) LIBS = $(shell mysql_config --libs)
EXECUTABLES = myclient ■■■■all : $(EXECUTABLES)
myclient : myclient.c ■■■■$(CC) $(CFLAGS) $^ -o $@ $(LIBS) |
Make의 $(shell 셸 명령어) 함수를 이용하면 shell 함수 뒤에 오는 셸 명령을 수행하고 결과를 리턴한다.
'API 및 라이브러리 > MySQL C API' 카테고리의 다른 글
MySQL C API - 오류처리 (mysql_errno, mysql_error) (0) | 2011.07.12 |
---|---|
mysql_options() - 연결 옵션을 설정 (0) | 2011.07.12 |
mysql_real_connect() - MySQL 데이터베이스 연결 (0) | 2011.07.11 |
MySQL C API 데이터 타입 (1) | 2011.07.11 |
MySQL C API 함수 개요 (0) | 2011.07.10 |
MYSQL
이 구조는 하나의 데이터베이스 커넥션을 다루는 방법을 나타낸다.
이것은 대부분 모든MySQL 함수에 사용된다.
사용자는 MYSQL 구조의 카피를 만들 필요가 없다. 이런 카피가 사용 가능하다는 보장이 없다.
MYSQL_RES
이 구조는 로우들을 리턴한 쿼리의 결과를 나타낸다 rows (SELECT, SHOW, DESCRIBE,EXPLAIN).
쿼리에서 리턴된 정보는 이 장의 나머지에 result set 로 호출된다.
MYSQL_ROW
이것은 데이터의 열 하나의 타입에 따라 나타난다.
이것은 일반적으로 계산되는 바이트 문자열(스트링)의 어레이로 실행된다.
(필드 값이 바이너리 데이터를 포함하고 있다면,이런 값들이 null 바이트를
내부적으로 포함하고 있기 때문에 사용자는 이것들을 null-terminated 문자열로 취급할 수 없다)
mysql_fetch_row()함수를 호출하여 로우들을 얻는다.
MYSQL_FIELD
이 구조는 필드 이름, 타입 사이즈 등과 같은 필드 정보를 포함하고 있다.
이 요소들이 여기에 자세히 기술되어 있다.
사용자는 각 필드에서 mysql_fetch_field() 함수를 반복적으로 호출함으로써 MYSQL_FIELD 구조를 얻을 수 있다.
필드 값들은 이 구조의 부분이 아니다; 그것들은 MYSQL_ROW 구조에 포함되어 있다
MYSQL_FIELD_OFFSET
이것은 MySQL 필드 리스트 안에 오프셋의 타입에 따라 나타난다.
(mysql_field_seek()함수가 사용됨) 오프셋들은 0(제로)에서 시작한 하나의 로우 내에서 필드의 요소이다.
my_ulonglong
로우의 숫자, mysql_affected_rows(), mysql_num_rows(), mysql_insert_id()함수에 사용된 타입.
이 타입은 0 부터 1.84e19까지의 범위를 제공한다.
몇몇 시스템에서 my_ulonglong 타입 값이 출력되지 않는 경우가 있다.
이런 값을 출력하려면, unsigned long 으로 변경하고, %lu 프린트 포맷을 이용.
예:) printf ("Number of rows: %lu\n", (unsigned long) mysql_num_rows(result)); |
MYSQL_FIELD 구조는 여기 열거한 요소들을 포함하고 있다:
char * name
null-terminated 문자열로, 필드의 이름. 필드에 AS 절로 알리아스(alias)가 주어졌다면,name 값은 그 알리아스(alias)이다.
char * org_name
null-terminated 문자열로, 필드 이름. 알리아스들이 무시된다.
char * table
계산되지 않은 필드를 포함하는 테이블 이름. 계산된 필드의 경우, table 값은 빈 문자열이다.
테이블에 AS 절로 알리아스가 주어졌다면, table 값은 그 알리아스이다.
char * org_table
null-terminated 문자열로, 테이블 이름. 알리아스들이 무시된다.
char * db
null-terminated 문자열로, 필드에서 온 데이터베이스의 이름. 필드가 계산된 필드라면,db 는 빈 문자열이다.
char * catalog
카다로그 이름. 이 값은 항상 "def"이다.
char * def
null-terminated 문자열로, 이 필드의 디폴트 값. mysql_list_fields()을 사용하면, 이것이 설정된다.
unsigned long length
테이블 정의에서 지정된 필드의 너비
unsigned long max_length
결과 셋의 필드 최대 너비(실제 결과 세트에서 로우를 위한 가장 긴 필드 값의 길이).
만약mysql_store_result() 또는 mysql_list_fields()을 사용한다면, 이것은 필드의 최대 길이를 포함하고 있다.
만약 mysql_use_result() 함수를 사용한다면, 이 변수의 값은0(zero)이다.
unsigned int name_length
name의 길이
unsigned int org_name_length
org_name의 길이.
unsigned int table_length
table의 길이
unsigned int org_table_length
org_table의 길이
unsigned int db_length
db의 길이
unsigned int catalog_length
catalog의 길이.
unsigned int def_length
def의 길이.
unsigned int flags
필드에서 서로 다른 비트 플래그(bit-flag). flags 값은 0(zero) 또는 비트 세트에 따라 더 큰 값이 될 수 있다:
플래그(Flag) 값 | 플래그(Flag) 설명 |
NOT_NULL_FLAG | 필드는 NULL 이 될 수 없다. |
PRI_KEY_FLAG | 필드는 주요 키의 일부이다. |
UNIQUE_KEY_FLAG | 필드는 싱글(unique)키의 일부이다. |
MULTIPLE_KEY_FLAG | 필드는non-unique 키의 일부이다. |
UNSIGNED_FLAG | 필드는UNSIGNED 속성을 가진다. |
ZEROFILL_FLAG | 필드는 ZEROFILL 속성을 가진다. |
BINARY_FLAG | 필드는 BINARY 속성을 가진다. |
AUTO_INCREMENT_FLAG | 필드는 AUTO_INCREMENT 속성을 가진다. |
ENUM_FLAG | 필드는ENUM (deprecated)이다. |
SET_FLAG | 필드는 SET (deprecated)이다. |
BLOB_FLAG | 필드는BLOB 또는 TEXT (deprecated)이다. |
TIMESTAMP_FLAG | 필드는 TIMESTAMP (deprecated)이다. |
플래그들이 타입의 속성보다는 필드의 타입을 표시하기 때문에
BLOB_FLAG,ENUM_FLAG, SET_FLAG, 그리고 TIMESTAMP_FLAG 플래그(flags) 이용은 무시된다.
MYSQL_TYPE_BLOB, MYSQL_TYPE_ENUM, MYSQL_TYPE_SET,
또는MYSQL_TYPE_TIMESTAMP 대신에 field->type 테스트가 바람직하다.
다음 예는 flags 값의 전형적인 이용을 보여준다:
if (field->flags & NOT_NULL_FLAG) printf("Field can't be null\n"); |
flags 값을 결정하기 위해 다음 편리한 매크로를 사용할 수 있다:
Flag 상태 | 설명 |
IS_NOT_NULL(flags) | 필드가 NOT NULL로 정의된다면 참(true) |
IS_PRI_KEY(flags) | 이 필드가 주요 키라면 참(True) |
IS_BLOB(flags) | 이 필드가 BLOB 또는 TEXT (무시됨; 테스트 field->type 대신에)라면 참(true) |
unsigned int decimals
숫자 필드에 십진수의 숫자.
unsigned int charsetnr
필드에서 캐릭터 셋 숫자.
enum enum_field_types type
필드의 타입. type 값은 다음 표에 있는 MYSQL_TYPE_ 심볼 중 하나 일 수 있다.
타입 값 | 타입 설명 |
MYSQL_TYPE_TINY | TINYINT 필드 |
MYSQL_TYPE_SHORT | SMALLINT 필드 |
MYSQL_TYPE_LONG | INTEGER 필드 |
MYSQL_TYPE_INT24 | MEDIUMINT 필드 |
MYSQL_TYPE_LONGLONG | BIGINT 필드 |
MYSQL_TYPE_DECIMAL | DECIMAL 또는 NUMERIC 필드 |
MYSQL_TYPE_NEWDECIMAL | 정교한 계산 DECIMAL 또는 NUMERIC필드 (MySQL 5.0.3 그리고 그 이후 버전에서) |
MYSQL_TYPE_FLOAT | FLOAT 필드 |
MYSQL_TYPE_DOUBLE | DOUBLE 또는 REAL 필드 |
MYSQL_TYPE_BIT | BIT 필드 (MySQL 5.0.3 그리고 그 이후 버전에서) |
MYSQL_TYPE_TIMESTAMP | TIMESTAMP 필드 |
MYSQL_TYPE_DATE | DATE 필드 |
MYSQL_TYPE_TIME | TIME 필드 |
MYSQL_TYPE_DATETIME | DATETIME 필드 |
MYSQL_TYPE_YEAR | YEAR 필드 |
MYSQL_TYPE_STRING | CHAR 또는 BINARY 필드 |
MYSQL_TYPE_VAR_STRING | VARCHAR 또는 VARBINARY 필드 |
MYSQL_TYPE_BLOB | BLOB 또는 TEXT 필드 (최대 길이를 결정하기 위해 max_length 를 사용하라) |
MYSQL_TYPE_SET | SET 필드 |
MYSQL_TYPE_ENUM | ENUM 필드 |
MYSQL_TYPE_GEOMETRY | 공간적 필드 |
MYSQL_TYPE_NULL | NULL-타입 필드 |
MYSQL_TYPE_CHAR | 무시됨; 대신에MYSQL_TYPE_TINY 를 사용하라 |
필드가 숫자타입을 가지고 있는지 테스트하기 위해 IS_NUM() 매크로를 사용할 수 있다.
type 값을IS_NUM()에 전달하라 그러면 필드가 숫자라면 참(TRUE)로 평가한다:
if (IS_NUM(field->type)) printf("Field is numeric\n"); |
문자열 데이터 타입에서 바이너리 데이터와 non-바이너리 데이터를 비교하기 위해서charsetnr 값이 63인지 확인하라.
만약 그렇다면, 캐릭터 셋은 non-바이너리 데이터보다 바이너리를 보여주는 binary이다.
이것이 BINARY 와 CHAR, VARBINARY 와VARCHAR, BLOB 와 TEXT를 구별하는 방법이다.
'API 및 라이브러리 > MySQL C API' 카테고리의 다른 글
MySQL C API - 오류처리 (mysql_errno, mysql_error) (0) | 2011.07.12 |
---|---|
mysql_options() - 연결 옵션을 설정 (0) | 2011.07.12 |
mysql_real_connect() - MySQL 데이터베이스 연결 (0) | 2011.07.11 |
mysql_config명령을 이용한 MySQL C API 컴파일 (0) | 2011.07.11 |
MySQL C API 함수 개요 (0) | 2011.07.10 |