JNetLibray
로딩중...
검색중...
일치하는것 없음
JNetDB.h
이 파일의 문서화 페이지로 가기
1#pragma once
2#include <Windows.h>
3#include <sql.h>
4#include <sqlext.h>
5#include <mutex>
6#include <queue>
7
8namespace jnet {
9 enum
10 {
12 BINARY_MAX = 8000
13 };
14
17 {
18 private:
19 // DB 연결 핸들
20 SQLHDBC m_DBConnection = SQL_NULL_HANDLE;
21
22 // SQL 상태 관리 핸들
23 // API에 인수를 전달하거나, 출력 인수로 데이터를 받을 수 있는 "상태"로 해석
24 SQLHSTMT m_Statement = SQL_NULL_HANDLE;
25
27 const wchar_t* m_ConnectionErrLogFile = L"ConnectionErrLog.txt";
28 static std::mutex m_LogFileMtx;
29
30 public:
31 JNetDBConn() : JNetDBConn(false) {}
32 JNetDBConn(BOOL connectionErrorFileLogFlag) : m_ConnectionErrorFileLogFlag(connectionErrorFileLogFlag) {}
34 Clear();
35 }
36
37 bool Connect(SQLHENV henv, const WCHAR* connectionString);
38 void Clear();
39
40 // DB 커넥션 연결 유지 확인을 위해 단순 쿼리 확인
41 bool Ping();
42
43 // 쿼리를 실행하는 SQL 함수
44 bool Execute(const WCHAR* query);
45
46 // SELECT 계열의 쿼리를 요청할 때 결과를 받기 위한 함수
47 // - True 반환: 수신 받을 데이터 존재
48 // - False 반환: 쿼리는 성공하였으나 수신 받을 데이터가 존재하지 않은 경우이거나 쿼리 자체가 실패
49 bool Fetch();
50
51 bool GetSQLData(INT32& data);
52
53 // 데이터가 몇 개가 있는지 확인하기 위한 함수
54 // (행 갯수 반환, SQLRowCount(..))
55 // ( -1 반환 시 예외 처리 필요 )
56 INT32 GetRowCount();
57
58 // 이전 바인딩된 것들을 정리하는 함수
59 void Unbind();
60
61 public:
62 bool BindParam(INT32 paramIndex, bool* value);
63 bool BindParam(INT32 paramIndex, float* value);
64 bool BindParam(INT32 paramIndex, double* value);
65 bool BindParam(INT32 paramIndex, INT8* value);
66 bool BindParam(INT32 paramIndex, INT16* value);
67 bool BindParam(INT32 paramIndex, INT32* value);
68 bool BindParam(INT32 paramIndex, INT64* value);
69 bool BindParam(INT32 paramIndex, TIMESTAMP_STRUCT* value);
70 bool BindParam(INT32 paramIndex, const WCHAR* str);
71 bool BindParam(INT32 paramIndex, const BYTE* bin, INT32 size);
72
73 bool BindCol(INT32 columnIndex, bool* value);
74 bool BindCol(INT32 columnIndex, float* value);
75 bool BindCol(INT32 columnIndex, double* value);
76 bool BindCol(INT32 columnIndex, INT8* value);
77 bool BindCol(INT32 columnIndex, INT16* value);
78 bool BindCol(INT32 columnIndex, INT32* value);
79 bool BindCol(INT32 columnIndex, INT64* value);
80 bool BindCol(INT32 columnIndex, TIMESTAMP_STRUCT* value);
81 bool BindCol(INT32 columnIndex, WCHAR* str, INT32 size, SQLLEN* index);
82 bool BindCol(INT32 columnIndex, BYTE* bin, INT32 size, SQLLEN* index);
83
84 public:
86 // SQL 쿼리를 작성할 때 인자들을 전달하기 위한 함수
87 // - cType: C형식 식별자
88 // - sqlType: ODBC C typedef
89 // (https://learn.microsoft.com/ko-kr/sql/odbc/reference/appendixes/c-data-types?view=sql-server-ver16)
91
92 // BindParam: 쿼리의 'paramIndex' 인덱스 인자를 설정한 값으로 바인딩한다.
93 bool BindParam(SQLUSMALLINT paramIndex, SQLSMALLINT cType, SQLSMALLINT sqlType, SQLULEN len, SQLPOINTER ptr, SQLLEN* index);
94
95 // SQL 실행 후 데이터를 읽기 위한 함수
96 bool BindCol(SQLUSMALLINT columnIndex, SQLSMALLINT cType, SQLULEN len, SQLPOINTER value, SQLLEN* index);
97
98 private:
99 void HandleError(SQLRETURN ret, SQLSMALLINT errMsgBuffLen = 0, SQLWCHAR* errMsgOut = NULL, SQLSMALLINT* errMsgLenOut = NULL);
100 void HandleError(SQLRETURN ret, SQLSMALLINT hType, SQLHANDLE handle, SQLSMALLINT errMsgBuffLen = 0, SQLWCHAR* errMsgOut = NULL, SQLSMALLINT* errMsgLenOut = NULL);
101 void ErrorMsgFileLogging(const SQLWCHAR* errMsg, SQLSMALLINT errMsgLen, const std::wstring& filePath);
102 };
103
104
106 // 연결을 미리 여러 개 맺고, DB 요청이 필요할 때마다 Pool에서 재사용한다.
107 // DB 커넥션 풀은 전역에 하나만 존재(like 싱글톤)
109 {
110 private:
111 // SQL 환경 핸들
112 SQLHENV m_SqlEnvironment = SQL_NULL_HANDLE;
113
114 // DB 연결 단위들을 담는 벡터
115 //std::vector<DBConnection*> m_DBConnections;
116 std::queue<JNetDBConn*> m_DBConnectionsQueue;
118
120
121 public:
123 JNetDBConnPool(bool dbConnErrorLog) : m_DBConnErrorLogFlag(dbConnErrorLog) {}
125 Clear();
126 }
127
128 // 커넥션 풀을 만드는 함수(서버가 구동될 떄 한 번만 호출되는 함수)
129 // - connectionCount: 생성 DB 커넥션 갯수
130 // - connectionString: 연결 DB와 환경 설정을 위한 문자열
131 bool Connect(INT32 connectionCount, const WCHAR* connectionString);
132
133 void Clear();
134
135 // 생성된 커넥션 풀 중 획득(POP)
136 JNetDBConn* Pop();
137 // 커넥션 풀에 커넥션 반납(PUSH)
138 void Push(JNetDBConn* connection, bool isDisconnected = false, bool tryToConnect = false, const WCHAR* connectionString = NULL);
139 };
140
141}
unsigned char BYTE
Definition CommTypes.h:3
DB 커넥션 인스턴스 Pool
Definition JNetDB.h:109
JNetDBConnPool(bool dbConnErrorLog)
Definition JNetDB.h:123
bool Connect(INT32 connectionCount, const WCHAR *connectionString)
Definition JNetDB.cpp:460
SQLHENV m_SqlEnvironment
Definition JNetDB.h:112
std::mutex m_DBConnectionsMtx
Definition JNetDB.h:117
std::queue< JNetDBConn * > m_DBConnectionsQueue
Definition JNetDB.h:116
void Push(JNetDBConn *connection, bool isDisconnected=false, bool tryToConnect=false, const WCHAR *connectionString=NULL)
Definition JNetDB.cpp:525
bool m_DBConnErrorLogFlag
Definition JNetDB.h:119
~JNetDBConnPool()
Definition JNetDB.h:124
void Clear()
Definition JNetDB.cpp:487
JNetDBConnPool()
Definition JNetDB.h:122
JNetDBConn * Pop()
Definition JNetDB.cpp:510
DB Connection 추상화
Definition JNetDB.h:17
bool Fetch()
Definition JNetDB.cpp:115
bool BindParam(INT32 paramIndex, bool *value)
Definition JNetDB.cpp:169
JNetDBConn(BOOL connectionErrorFileLogFlag)
Definition JNetDB.h:32
static std::mutex m_LogFileMtx
Definition JNetDB.h:28
void HandleError(SQLRETURN ret, SQLSMALLINT errMsgBuffLen=0, SQLWCHAR *errMsgOut=NULL, SQLSMALLINT *errMsgLenOut=NULL)
Definition JNetDB.cpp:319
bool Execute(const WCHAR *query)
Definition JNetDB.cpp:94
bool GetSQLData(INT32 &data)
Definition JNetDB.cpp:145
void Clear()
Definition JNetDB.cpp:71
void ErrorMsgFileLogging(const SQLWCHAR *errMsg, SQLSMALLINT errMsgLen, const std::wstring &filePath)
Definition JNetDB.cpp:423
void Unbind()
Definition JNetDB.cpp:285
const wchar_t * m_ConnectionErrLogFile
Definition JNetDB.h:27
bool Connect(SQLHENV henv, const WCHAR *connectionString)
Definition JNetDB.cpp:12
JNetDBConn()
Definition JNetDB.h:31
bool Ping()
Definition JNetDB.cpp:88
SQLHDBC m_DBConnection
Definition JNetDB.h:20
~JNetDBConn()
Definition JNetDB.h:33
INT32 GetRowCount()
Definition JNetDB.cpp:158
bool BindParam(INT32 paramIndex, const WCHAR *str)
SQLHSTMT m_Statement
Definition JNetDB.h:24
bool BindCol(INT32 columnIndex, bool *value)
Definition JNetDB.cpp:227
bool m_ConnectionErrorFileLogFlag
Definition JNetDB.h:26
JNetCore/JNetServer/JNetOdbcServer/JNetClient class
@ WVARCHAR_MAX
Definition JNetDB.h:11
@ BINARY_MAX
Definition JNetDB.h:12