1. 새 콘솔 프로젝트 생성
참고 [VS2022 및 VS2010 C 언어 콘솔 출력 Hello World] VS2022 및 VS2010 C 언어 콘솔 출력 Hello World_vs2022의 소스 파일은 어디에 있습니까_Xijin의 no1 블로그-CSDN 블로그
2.MySQL 설치 _
[ MySQL 8.0.34 설치 튜토리얼 ] MySQL 8.0.34 설치 튜토리얼_시진님의 no1 블로그-CSDN 블로그를 참고하세요.
3. MySQL 라이브러리 파일을 프로젝트 파일에 복사합니다 .
MySQL 설치 폴더 아래에 include 폴더와 lib 폴더가 보입니다. include 폴더와 lib 폴더 및 그 안의 모든 파일을 프로젝트 폴더(demo.cpp가 같은 폴더에 있음)에 복사하고 lib 폴더 아래의 libmysql.dll 파일을 프로젝트 폴더(같은 폴더에 있는demo.cpp)에 복사합니다. 폴더).
그 중 include 폴더에는 헤더 파일(메서드 선언)이 저장되고, lib 폴더에는 동적 및 정적 라이브러리(메서드 구현, 라이브러리에 패키지됨)가 저장됩니다.
4. 다음 내용으로 새 "stdbool.h" 파일을 생성하고 해당 파일을 프로젝트 폴더에 복사합니다.
이 단계의 목적은 vs 컴파일 오류: fatalerrorc1083: 포함 파일을 열 수 없습니다: "stdbool.h": nosuchfileordirectory(코드 조각)를 해결하는 것입니다.
"stdbool.h" 파일의 내용은 다음과 같습니다.
/*
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
*/
#ifndef __STDBOOL_H__
#define __STDBOOL_H__
#define bool int
#define true 1
#define false 0
#endif
/* __STDBOOL_H__ */
"stdbool.h" 파일은 프로젝트 폴더의 include 폴더에 위치합니다.
5. 호출 라이브러리 구성
다음의 모든 구성에 대해 먼저 MySQL 라이브러리에 해당하는 플랫폼 win32 또는 x64 를 선택해야 합니다. 그렇지 않으면 오류가 발생합니다.
다음과 같이:
오류 LNK2019: _main 함수에서 참조되는 해결되지 않은 외부 기호 _mysql_real_connect@32
오류 LNK2019: _main 함수에서 참조되는 확인되지 않은 외부 기호 _mysql_query@8
오류 LNK2019: _main 함수에서 참조되는 해결되지 않은 외부 기호 _mysql_init@4
오류 LNK2019: 확인할 수 없는 외부 기호 _mysql_close@4. 이 기호가 _main 함수에서 참조되고 다른 오류가 발생하는 경우 이는 vs 프로젝트의 비트 수가 MySQL 라이브러리의 비트 수와 일치하지 않기 때문입니다.
프로젝트 속성을 변경할 수 있습니다. 프로젝트 속성은 두 곳에서 변경해야 합니다(해당 플랫폼의 라이브러리 구성도 동시에 수정해야 합니다).
(1) 프로젝트 속성-->[구성 속성]-->[VC++ 디렉터리]-->[포함 디렉터리]: mysql 라이브러리의 헤더 파일이 있는 디렉터리를 선택합니다.
프로젝트 폴더에는 폴더가 포함됩니다.
또는
C:\Program Files\MySQL\MySQL 서버 8.0\include
(2) 프로젝트 속성 --> [구성 속성] --> [VC++ 디렉터리] --> [라이브러리 디렉터리]: mysql 라이브러리의 정적 라이브러리가 위치한 디렉터리를 선택합니다.
프로젝트 폴더 lib 폴더
또는
C:\Program Files\MySQL\MySQL 서버 8.0\lib
(3) 프로젝트 속성 --> [구성 속성] --> [링커] --> [입력] --> [추가 종속성]
libmysql.lib를 추가합니다.
6. 샘플 코드 1 - MySQL 라이브러리 구성 및 호출 성공 여부 확인
다음 코드로 deco.cpp의 내용을 덮어씁니다.
#include <stdio.h>
#include <winsock.h>
#include <mysql.h>
int main()
{
MYSQL*mysql=mysql_init(0);
system("pause");
return 0;
}
위의 코드는 성공적으로 컴파일되었으며 이는 구성이 성공했음을 나타냅니다. 성공적으로 실행되면 MySQL 라이브러리가 성공적으로 호출되었음을 의미합니다.
7. 샘플 코드 2 - MySQL 클라이언트 버전 가져오기
다음 코드로 deco.cpp의 내용을 덮어씁니다.
#include <stdio.h>
#include <winsock.h>
#include <mysql.h>
int main()
{
//获取客户端的版本信息
printf("mysql client version:%s\n", mysql_get_client_info());
system("pause");
return 0;
}
8. 샘플 코드 3 - orderitems 테이블의 데이터를 쿼리 하고 인쇄합니다.
이 예에는 1. 데이터베이스, 2. 데이터베이스에 테이블이 있음, 3. 테이블에 데이터가 있음, 4. 데이터베이스에 대한 읽기 및 쓰기 권한이 있는 사용자 등 많은 전제 조건이 필요합니다.
#include <stdio.h>
#include <winsock.h>
#include <mysql.h>
const char host[] = "127.0.0.1"; // MySQL所在机器的ip
const int port = 0; // MySQL所在机器的端口
const char db[] = "test"; // 数据库名
const char user[] = "root"; // 用户名
const char passwd[] = "test123"; // 用户密码
int main()
{
//1、获取MySQL实例(相当于创建了一个MySQL句柄)
MYSQL* ms = mysql_init(nullptr);
//2、连接数据库
if(mysql_real_connect(ms, host, user, passwd, db, port, nullptr, 0) == nullptr) {
printf("数据库连接失败!\n");
return 1;
}
printf("数据库连接成功!\n");
mysql_set_character_set(ms, "utf8"); //设置编码格式为utf8
//3、查询数据库表中的记录
//a、执行查询语句
char sql[] = "select * from orderitems;";
if(mysql_query(ms, sql) != 0) {
printf("查询数据失败!\n");
return 2;
}
printf("查询数据成功!\n");
//b、获取查询结果
MYSQL_RES* res = mysql_store_result(ms);
int rows = mysql_num_rows(res); //行数
int cols = mysql_num_fields(res); //列数
//获取每列的属性并打印列名
MYSQL_FIELD* fields = mysql_fetch_fields(res);
for(int i = 0;i < cols;i++) printf("%s\t", fields[i].name);
printf("\n");
for(int i = 0;i < rows;i++) {
//获取一行数据并进行打印
MYSQL_ROW row = mysql_fetch_row(res);
for(int j = 0;j < cols;j++) {
printf("%s\t", row[j]);
}
printf("\n");
}
mysql_free_result(res); // 释放内存空间
//4、关闭数据库
mysql_close(ms);
printf("数据库关闭成功!\n");
return 0;
}
마지막에 작성 : 이 글은 MySQL 라이브러리를 사용하는 기본적인 내용만 보여주고, MySQL의 C 언어 인터페이스에 대한 내용은 너무 많이 소개하지 않습니다.