1. mariaDB ODBC 설치는 다음을 참고하세요.
C++ : matiaDB ODBC 설치하기
1. mariaDB Server ODBC Driver를 설치한다.https://mariadb.com/downloads/connectors/ Download MariaDB Products & Tools | MariaDBDownload MariaDB products, connectors, and tools including Community Server, Enterprise Server, ColumnStore and MaxScale.mari
taekho.tistory.com
2. DBManager.h 파일을 추가한다.
#pragma once
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" \
no_namespace rename("EOF", "adoEOF") \
rename("BOF", "adoBOF")
class DBManager
{
private:
_ConnectionPtr m_conn;
public:
DBManager();
~DBManager();
bool Connect();
_ConnectionPtr GetConnection();
};
3. DBManager.cpp 파일을 추가한다.
#include "DBManager.h"
DBManager::DBManager()
{
CoInitialize(NULL);
}
DBManager::~DBManager()
{
if (m_conn != nullptr)
{
m_conn->Close();
}
CoUninitialize();
}
bool DBManager::Connect()
{
HRESULT hr =
m_conn.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
return false;
m_conn->Open(
L"Provider=MSDASQL;"
L"Driver={MariaDB ODBC 3.2 Driver};"
L"Server=127.0.0.1;"
L"Port=3306;"
L"Database=database1;"
L"User=user1;"
L"Password=password1;"
L"CHARSET=utf8mb4;",
L"",
L"",
adConnectUnspecified
);
return true;
}
_ConnectionPtr DBManager::GetConnection()
{
return m_conn;
}
4. MemberDTO.h 파일을 추가한다.
#pragma once
#include <string>
class MemberDTO
{
public:
long id;
std::wstring forename;
std::wstring surname;
std::wstring email;
std::wstring password;
std::wstring joined;
std::wstring picture;
MemberDTO() : id(0) {}
};
5. MemberDAO.h 파일을 추가한다.
#pragma once
#include <vector>
#include "DBManager.h"
#include "MemberDTO.h"
class MemberDAO
{
private:
DBManager* m_db;
public:
MemberDAO(DBManager* db);
std::vector<MemberDTO> GetAll();
bool Insert(MemberDTO dto);
};
6. MemberDAO.cpp 파일을 추가한다.
#include "MemberDAO.h"
MemberDAO::MemberDAO(DBManager* db)
{
m_db = db;
}
std::vector<MemberDTO> MemberDAO::GetAll()
{
std::vector<MemberDTO> list;
_RecordsetPtr rs;
rs.CreateInstance(__uuidof(Recordset));
rs->Open(
L"SELECT id, forename, surname, email FROM member",
_variant_t((IDispatch*)m_db->GetConnection()),
adOpenStatic,
adLockReadOnly,
adCmdText
);
while (!rs->adoEOF)
{
MemberDTO dto;
dto.id = rs->GetCollect("id");
dto.forename = (wchar_t*)(_bstr_t)rs->GetCollect("forename");
dto.surname = (wchar_t*)(_bstr_t) rs->GetCollect("surname");
dto.email = (wchar_t*)(_bstr_t)rs->GetCollect("email");
list.push_back(dto);
rs->MoveNext();
}
rs->Close();
return list;
}
bool MemberDAO::Insert(MemberDTO dto)
{
_CommandPtr cmd;
cmd.CreateInstance(__uuidof(Command));
cmd->ActiveConnection = m_db->GetConnection();
cmd->CommandType = adCmdText;
cmd->CommandText =
L"INSERT INTO member (forename, surname, email) VALUES (?, ?, ?)";
cmd->Parameters->Append(
cmd->CreateParameter(
L"forename",
adVarWChar,
adParamInput,
50,
_variant_t(dto.forename.c_str())
)
);
cmd->Parameters->Append(
cmd->CreateParameter(
L"surname",
adVarWChar,
adParamInput,
50,
_variant_t(dto.surname.c_str())
)
);
cmd->Parameters->Append(
cmd->CreateParameter(
L"email",
adVarWChar,
adParamInput,
100,
_variant_t(dto.email.c_str())
)
);
cmd->Execute(NULL, NULL, adCmdText);
return true;
}
7. main.cpp 파일을 추가한다.
#include <iostream>
#include <fcntl.h>
#include <io.h>
#include "DBManager.h"
#include "MemberDAO.h"
using namespace std;
int main()
{
_setmode(_fileno(stdout), _O_U16TEXT);
try
{
DBManager db;
if (!db.Connect())
{
wcout << L"DB 연결 실패"
<< endl;
return -1;
}
MemberDAO dao(&db);
vector<MemberDTO> list = dao.GetAll();
for (auto& dto : list)
{
wcout << L"ID: " << dto.id
<< L", Forename: " << dto.forename
<< L", Surname: " << dto.surname
<< L", Email: " << dto.email
<< endl;
}
MemberDTO dto;
dto.forename = L"홍6";
dto.surname = L"길동6";
dto.email = L"hong6@test.com";
dao.Insert(dto);
wcout << L"-----------------------------" << endl;
wcout << L"Insert 완료" << endl;
vector<MemberDTO> list2 =
dao.GetAll();
for (auto& dto : list2)
{
wcout << L"ID: " << dto.id
<< L", Forename: " << dto.forename
<< L", Surname: " << dto.surname
<< L", Email: " << dto.email
<< endl;
}
}
catch (_com_error& e)
{
wcout << L"COM Error: " << e.ErrorMessage() << endl;
}
return 0;
}
8. mariaDB를 실행한다.
9. 프로그램을 실행한다.
'C++ GUI' 카테고리의 다른 글
| C++ GUI : wxWidgets에서 wxFTP 사용하기 (0) | 2026.05.18 |
|---|---|
| C++ GUI : wxWidgets에서 Login 구현하기 (0) | 2026.05.17 |
| C++ GUI : Console에서 mariaDB C/C++ Connector 사용하기 (0) | 2026.05.10 |
| C++ GUI : MFC에서 mariaDB ADO사용하기 (0) | 2026.05.10 |
| C++ GUI : GUI(Graphical User Interface)에서 DTO&DAO 사용하기 (0) | 2026.05.09 |