printf("ho_tari\n");
MySQL과 Visual Studio C언어 연동 본문
MySQL과 Visual Studio C언어 연동
호타리 2025. 4. 21. 13:001. 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;
}
<실행 결과>