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
'프로그래밍 노트 > C&C++' 카테고리의 다른 글
C++ shared_ptr 객체를 전달받은 함수에서 사용 후 해제하는 방법 (0) | 2021.02.15 |
---|---|
Visual Studio 2019용으로 libiconv 빌드하기 및 utf8 <-> cp949 변환 예제 (2) | 2021.02.09 |
pthread 람다(lambda) 예제 (0) | 2021.01.28 |
C++ 예제 - INI 파일 생성하여 읽고 쓰기 (0) | 2021.01.24 |
C/C++ - 실행 파일의 절대 경로 얻는 방법 ( realpath, GetModuleFileName ) (5) | 2021.01.22 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!