반응형

Visual Studio 2019에서 MySQL/MariaDB C API를 사용하는 간단한 예제를 테스트해보았습니다. 



2021. 02. 08 최초작성




아래 링크에 접속하여 MariaDB Connector/C를 다운로드합니다. 

Oracle에서 다운로드 받으면 로그인해야 하고 번거로워서 이곳에서 다운로드 받아 사용했습니다. 

https://mariadb.com/downloads/#connectors 



OS 항목을 MS Windows (64-bit)로 변경한 후, Download를 클릭합니다.

 




설치하면 아래 경로에 설치됩니다. 

C:\Program Files\MariaDB\MariaDB Connector C 64-bit



테스트를 위해 콘솔 프로젝트를 생성했습니다. 



Create a new project를 선택합니다. 

 



Windows Desktop Wizard를 선택하고 Next를 클릭합니다. 

 



Project name을 적은 후, Create를 클릭합니다. 



Application type으로 Console Application을 선택한 후, Empty project를 체크하고 OK를 클릭합니다. 

 




솔루션 탐색기에서 Source Files를 선택하고 마우스 우클릭하여 메뉴에서 Add > New Item을 선택합니다. 

 



C++ File이 선택된 상태에서 Add를 클릭합니다. 

 



솔루션 탐색기에 cpp 파일이 추가됩니다.

 



솔루션 플랫폼을 x64로 변경합니다. 




솔루션 탐색기에서 프로젝트 이름이 선택된 상태에서 메뉴에서 Project > Properties를 선택합니다. 




Configuration을 All Configurations로 변경합니다. 

 



C/C++ 선택하고 Additional Include Directories에 다음 경로를 추가합니다.

 

C:\Program Files\MariaDB\MariaDB Connector C 64-bit\include

 



Linker를 선택하고 Additional Library Directories에 다음 경로를 추가합니다.

 

C:\Program Files\MariaDB\MariaDB Connector C 64-bit\lib

 



Linker > Input을 선택하고 libmariadb.lib; 를 추가합니다. 

 




코드를 소스코드 파일에 복사합니다.  

다음 부분은 환경에 맞게 수정해야 합니다.  

 

"IP",  /* server hostname or IP address */    데이터베이스 서버 IP

"ID",  /* mysql user */                             데이터베이스 서버 접속용 ID

"PASSWORD",   /* password */                 데이터베이스 서버 접속용 PASSWORD

"DATABASE",    /* default database to use, NULL for none */ 데이터베이스 서버에서 사용할 데이터베이스 이름

 

if (mysql_query(mysql, "SELECT * FROM TABLE_NAME")) { TABLE_NAME 테이블에 있는 모든 데이터를 가져오는 질의문 

 

#include <stdlib.h>
#include <stdio.h>

#include <mysql.h>

int main(int argc, char **argv)
{
	MYSQL *mysql = NULL;

	if (mysql_library_init(argc, argv, NULL)) {
		fprintf(stderr, "could not initialize MySQL client library\n");
		exit(1);
	}

	mysql = mysql_init(mysql);

	if (!mysql) {
		puts("Init faild, out of memory?");
		return EXIT_FAILURE;
	}

	mysql_options(mysql, MYSQL_READ_DEFAULT_FILE, (void *)"./my.cnf");

	if (!mysql_real_connect(mysql,       /* MYSQL structure to use */
		"IP",  /* server hostname or IP address */
		"ID",  /* mysql user */
		"PASSWORD",   /* password */
		"DATABASE",    /* default database to use, NULL for none */
		0,           /* port number, 0 for default */
		NULL,        /* socket file or named pipe name */
		CLIENT_FOUND_ROWS /* connection flags */)) {
		puts("Connect failed\n");
	}
	else {
		if (mysql_query(mysql, "SELECT * FROM TABLE_NAME")) {
			printf("Query failed: %s\n", mysql_error(mysql));
		}
		else {
			MYSQL_RES *result = mysql_store_result(mysql);

			if (!result) {
				printf("Couldn't get results set: %s\n", mysql_error(mysql));
			}
			else {
				MYSQL_ROW row;
				int i;
				unsigned int num_fields = mysql_num_fields(result);

				while ((row = mysql_fetch_row(result))) {
					for (i = 0; i < num_fields; i++) {
						printf("%s, ", row[i]);
					}
					putchar('\n');
				}

				mysql_free_result(result);
			}
		}
	}

	mysql_close(mysql);

	mysql_library_end();

	return EXIT_SUCCESS;
}




솔루션 설정을 Release와 Debug로 바꾸어가며 메뉴에서 Build > Build Solution을 선택하여  프로젝트를 빌드합니다.

 

 




아래 경로에 있는 libmariadb.dll 파일을 복사하여  프로젝트 빌드후 생긴 프로젝트 이름 폴더 아래에 있는 x64 폴더의 Debug와 Release 폴더에 붙여넣기 해줍니다. 

 

C:\Program Files\MariaDB\MariaDB Connector C 64-bit\lib\libmariadb.dll






CTRL + F5를 눌러 실행시켜보면 데이터베이스의 특정 테이블 정보를 가져오는 것을 볼 수 있습니다. 

?로 보이는 것은 데이터베이스에 한글이 UTF8로 저장되었기 때문입니다.

euckr 또는 cp949로 변환해주는 작업이 필요합니다. 

 

3, ???, ??,

5, ????, ???,

6, test name, test country,




다음 링크에 더 많은 MySQL/MariaDB C API 예제가 있습니다. 

 

https://github.com/hholzgra/connector-c-examples 






문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts