printf("ho_tari\n");

MySQL과 Visual Studio C언어 연동 본문

(Telechips) AI 시스템 반도체 SW 개발자 교육/MySQL & Visual Studio C 연동 과제

MySQL과 Visual Studio C언어 연동

호타리 2025. 4. 21. 13:00

1. MySQL 서버 설치

MySQL :: Download MySQL Community Server

 

버전 : 8.0.42

windows(x86, 64-bit), ZIP Archive 다운로드

 

2. Visual Studio 2022 설치 및 프로젝트 생성

 

3. 솔루션 속성 설정

속성 → C/C++ → 일반 → 추가 포함 디렉토리 → "C:\Program Files\MySQL\MySQL Server 8.0\include" 추가

 

링커 → 일반 → 추가 라이브러리 디렉토리 → "C:\Program Files\MySQL\MySQL Server 8.0\lib" 추가

 

링커 → 입력 → 추가종속성 → "libmysql.lib" 추가

 

"libmysql.dll" 파일을 복사해서 Visual Studio 솔루션 Debug 폴더에 붙여넣기

("C:\Users\intel09\source\repos\sql\x64\Debug")

 

MySQL 8.0 Command Line에서 "testdb" 만들고 "customer" 테이블 생성 (비밀번호 : 1111)

 

CREATE CATABASE testDB;

USE TESTDB;

CREATE TABLE customer (
    u_id INT PRIMARY KEY,
    u_name CHAR(20) NOT NULL,
    address VARCHAR(200)
);

INSERT INTO customer (u_id, u_name, address) VALUES
(100, '이호석', '서울'),
(200, '이희경', '광주'),
(300, '박덕기', '인천'),
(400, '배호종', '대전'),
(500, '지광성', '부산'),
(600, '김기동', '대전');

SELECT * FROM customer;

 

위 명령어를 순차적으로 입력해서 "customer" 테이블 생성

 

Visual Studio에서 C언어 코드로 MySQL에 접속하고 제어하기

 

<아이디가 root이고 비밀번호가 1111인 MySql 서버가 있다. 이 MySql 서버에 있 는 testDB 데이터베이스에 접속하기 위한 C로 프로그램을 작성>

#include <stdio.h>
#include <WinSock2.h>
#include <mysql.h>
#pragma comment(lib, "libmysql.lib")
#pragma comment(lib, "ws2_32.lib")

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PWD "1111"
#define MYSQL_DB "testdb"
#define PORT 3306

int main()
{
	MYSQL mysql;

	mysql_init(&mysql);

	if (!mysql_real_connect(&mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB, PORT, 0, 0))
	{
		printf("[접속 실패]\n");
		printf("MySql 접속 NO\n");
		printf("오류 메시지: %s\n", mysql_error(&mysql));
	}
	else
	{
		mysql_query(&mysql, "set names euckr");
		printf("[접속 성공]\n");
		printf("MySql 접속 OK\n");

		mysql_close(&mysql);
	}
	return 0;
}

 

<실행 결과>

 

<testDB에 있는 customer테이블 목록을 아래와 같이 출력하는 C로 프로그램을 작성>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <WinSock2.h>
#include <mysql.h>
#pragma comment(lib, "libmysql.lib")
#pragma comment(lib, "ws2_32.lib")

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PWD "1111"
#define MYSQL_DB "testdb"
#define PORT 3306

int main()
{
	MYSQL mysql;
	MYSQL_ROW row;
	MYSQL_RES* res;

	char sql[1024];

	mysql_init(&mysql);

	if (!mysql_real_connect(&mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB, PORT, 0, 0))
	{
		printf("%s\n", mysql_error(&mysql));
		return 0;
	}

	mysql_query(&mysql, "set names euckr");

	sprintf(sql, "select * from customer");
	if (mysql_query(&mysql, sql))
	{
		return 0;
	}
	if ((res = mysql_store_result(&mysql)) == NULL)
	{
		return 0;
	}
	printf("아이디	이름	주소\n");
	while ((row = mysql_fetch_row(res)) != NULL)
	{
		printf("  %s  %s  %s\n", row[0], row[1], row[2]);
	}
	mysql_free_result(res);
	mysql_close(&mysql);
	return 0;
}

 

<실행 결과>

 

<testDB에 있는 customer테이블에서 입력한 지역에 해당하는 데이터 목록을 아래 와 같이 출력하는 C로 프로그램을 작성>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <WinSock2.h>
#include <mysql.h>
#pragma comment(lib, "libmysql.lib")
#pragma comment(lib, "ws2_32.lib")

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PWD "1111"
#define MYSQL_DB "testdb"
#define PORT 3306

int main()
{
	MYSQL mysql;
	MYSQL_ROW row;
	MYSQL_RES* res;
	char sql[1024];
	char* address = (char*)malloc(sizeof(char));
	mysql_init(&mysql);

	if (!mysql_real_connect(&mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB, PORT, 0, 0))
	{
		printf("%s\n", mysql_error(&mysql));
		return 0;
	}
	mysql_query(&mysql, "set names euckr");
	printf("검색 주소 : ");
	gets(address);
	sprintf(sql, "select * from customer where address = '%s'", address);
	if (mysql_query(&mysql, sql))
	{
		return 0;
	}
	if ((res = mysql_store_result(&mysql)) == NULL)
	{
		return 0;
	}
	if ((row = mysql_fetch_row(res)) == NULL)
	{
		printf("검색 데이터가 없습니다.\n");
		return 0;
	}
	else
	{
		printf("아이디	이름	주소\n");
		printf("  %s  %s  %s\n", row[0], row[1], row[2]);
	}
	while ((row = mysql_fetch_row(res)) != NULL)
	{
		printf("  %s  %s  %s\n", row[0], row[1], row[2]);
	}
	mysql_free_result(res);
	mysql_close(&mysql);
	return 0;
}

 

<실행 결과>

 

<customer 테이블에 데이터를 삽입하는 프로그램을 작성 (단, 이름과 주소를 입력받아 customer 테이블에 삽입)>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <WinSock2.h>
#include <mysql.h>
#pragma comment(lib, "libmysql.lib")
#pragma comment(lib, "ws2_32.lib")

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PWD "1111"
#define MYSQL_DB "testdb"
#define PORT 3306

int main()
{
	MYSQL mysql;
	MYSQL_ROW row;
	MYSQL_RES* res;
	char sql[1024];
	int select;
	int u_id;
	char* u_name;
	char* address;
	u_name = (char*)malloc(sizeof(char));
	address = (char*)malloc(sizeof(char));
	mysql_init(&mysql);
	if (!mysql_real_connect(&mysql, MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB, PORT, 0, 0))
	{
		printf("%s\n", mysql_error(&mysql));
		return 0;
	}
	mysql_query(&mysql, "set names euckr");
	printf("삽입할 데이터 입력\n");
	printf("이름 : ");
	fflush(stdin);
	gets(u_name);
	printf("주소 : ");
	gets(address);
	sprintf(sql, "select max(u_id)+1 from customer");
	if (mysql_query(&mysql, sql))
	{
		return 0;
	}
	if ((res = mysql_store_result(&mysql)) == NULL)
	{
		return 0;
	}
	if ((row = mysql_fetch_row(res)) != NULL)
	{
		u_id = atoi(row[0]);
	}
	mysql_free_result(res);
	sprintf(sql, "insert into customer values(%d, '%s', '%s')", u_id, u_name, address);

	if (mysql_query(&mysql, sql))
	{
		return 0;
	}
	sprintf(sql, "select * from customer");
	if (mysql_query(&mysql, sql))
	{
		return 0;
	}
	if ((res = mysql_store_result(&mysql)) == NULL)
	{
		return 0;
	}
	printf("삽입 결과 출력\n");
	printf("아이디	이름	주소\n");
	while ((row = mysql_fetch_row(res)) != NULL)
	{
		printf("  %s  %s  %s\n", row[0], row[1], row[2]);
	}
	mysql_free_result(res);
	mysql_close(&mysql);
	return 0;
}

 

<실행 결과>