C 언어는 MySQL에 연결하여 SQL 문을 실행합니다(hello world).

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 언어 인터페이스에 대한 내용은 너무 많이 소개하지 않습니다.

추천

출처blog.csdn.net/xijinno1/article/details/133238180