[C++] MySQL ์—ฐ๋™ in Visual Studio

๋ณดํ†ต mysql์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๊น”๋ ค์žˆ๋Š”๊ฑด ๊ทธ๋ƒฅ C๋ฒ„์ „ API๋‹ค.
๊ทธ๋ƒฅ C๋ฒ„์ „์„ ์จ๋„ ๋˜๊ธด ํ•˜๋Š”๋ฐ, ์ด์™• C++์„ ์“ธ๊ฑฐ๋ฉด ์ œ๋Œ€๋กœ ์จ์•ผํ•˜์ง€ ์•Š๊ฒ ๋Š”๊ฐ€?

์ผ๋‹จ ์—ฌ๊ธฐ์„œ C++๋ฒ„์ „ ์ปค๋„ฅํ„ฐ๋ฅผ ๋‹ค์šด๋ฐ›์œผ๋ฉด ๋œ๋‹ค.
https://dev.mysql.com/downloads/connector/cpp/8.0.html
๋‚˜๋Š” 64 ๋ฒ„์ „์œผ๋กœ ๊น”๊ณ  ๊ทธ๋ƒฅ ๊ธฐ๋ณธ์„ค์ •์œผ๋กœ ๊น”์•˜๋‹ค.
๊ทธ๋Ÿผ ์–‘์ชฝ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ์ฆˆ์˜ MySQL ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ด๋ ‡๊ฒŒ ์ƒ๊ธธ๊ฑฐ๋‹ค.

์—ฌ๊ธธ ๋Œ€์ถฉ ์ฐ์–ด๋†“์ž.
๋ฐ”๋กœ๊ฐ€๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์–ด๋””์— ๋ชจ์•„๋†“๋“  ๊ฐ„์—.

์•„ ๊ทธ๋ฆฌ๊ณ , ์ด C++ ์ปค๋„ฅํ„ฐ๋Š” boost ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ข…์†์ ์ด๋‹ค.
boost๋ฅผ ๋จผ์ € ์„ค์น˜ํ•˜๊ณ  ์„ธํŒ…ํ•  ๊ฒƒ์„ ์•Œ๋ฆฐ๋‹ค.

๋‚˜๋Š” ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ ์ž‘์—…์„ ํ–ˆ๋Š”๋ฐ.. ์›ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ๊ฑธ ์จ๋„ ๋œ๋‹ค.

์—ฌํŠผ ๋‚˜๋Š” dll ๋‹ฌ๊ณ ๋‹ค๋‹ˆ๋Š”๊ฒŒ ์‹ซ์–ด์„œ ์ •์ ์œผ๋กœ ๋งํฌ๋ฅผ ํ•  ๊ฒƒ์ด๋‹ค.
๊ทผ๋ฐ ์ •์  ๋ฒ„์ „์€ ๋””๋ฒ„๊น… ๋ชจ๋“œ์—์„œ๋Š” ์•ˆ ๋„๋‹ˆ๊นŒ, ๋ฆด๋ฆฌ์ฆˆ ๋ชจ๋“œ๋กœ ํ•ด์•ผํ•œ๋‹ค.
sfml์€ static ๋ฒ„์ „๋„ ๋””๋ฒ„๊น… ๋ชจ๋“œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ... ์ •์„ฑ์ด ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

์—ฌํŠผ ํ”„๋กœ์ ํŠธ ์†์„ฑ์— ๋“ค์–ด๊ฐ€์„œ ๋ฆด๋ฆฌ์ฆˆ 64๋น„ํŠธ๋กœ ๋ฐ”๊พธ๊ณ ,
ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ์— boost์™€ ์ปค๋„ฅํ„ฐ ํ—ค๋” ์œ„์น˜๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ์—๋„ ์ปค๋„ฅํ„ฐ์™€ ๋ถ€์ŠคํŠธ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ์—๋Š” ์ € ๋‘๋†ˆ์„ ๋„ฃ์–ด์ค€๋‹ค.

๋งŒ์•ฝ dll์ด๋ž‘ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ €๊ธฐ์„œ static๋งŒ ์—†๋Š” ๋ฒ„์ „์ด ์žˆ๋‹ค. ๊ทธ๊ฑธ ๋‹ฌ๋ฉด ๋œ๋‹ค.


์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ์งœ๋ฉด ๋œ๋‹ค.
์•„๋ž˜ ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ๋””๋น„์— ์žˆ๋Š”๊ฑธ select๋กœ ์ฝ๊ธฐ๋งŒ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ๋ฏธ๋ฆฌ ๋„ฃ์–ด๋’€๋‹ค.

#include "pch.h"
#include <iostream>
#include <memory>

#define STATIC_CONCPP //static ๋ฒ„์ „์ด๋ผ๋Š” ๊ฑธ ์•Œ๋ฆผ!
#include <mysql/jdbc.h>

int main()
{
	constexpr auto host_name = "localhost";
	constexpr auto username = "admin";
	constexpr auto password = "1234";

	try {
		auto driver = get_driver_instance(); //์–œ ํ•ด์ œํ•˜๋ฉด ์•ˆ๋จ
		auto connector = std::unique_ptr<sql::Connection>(driver->connect(host_name, username, password)); //์—ฐ๊ฒฐ
		connector->setSchema("TestDB"); //ํŠน์ • DB ์ ‘์†

		auto statement = std::unique_ptr<sql::Statement>(connector->createStatement());

		//์ฟผ๋ฆฌ ๋ณด๋‚ด๊ณ  ๋ฐ›์•„์˜ด
		auto result_set = std::unique_ptr<sql::ResultSet>(statement->executeQuery("SELECT * from PeopleTable"));

		//๊ณ„์† ์ถœ๋ ฅ
		while (result_set->next())
			std::cout << result_set->getString("id") << ' ' << result_set->getString("name") << ' ' << result_set->getString("age") << std::endl;
	}
	catch (sql::SQLException& e) {
		std::cout << e.what() << std::endl
			<< "error code: " << e.getErrorCode() << std::endl
			<< "sqlstate:" << e.getSQLState() << std::endl;
	}
}

์ž˜ ๋ˆ๋‹ค.