📄 oradb.cpp
字号:
#include "oradb.h"#define _DEBUG/*char C_MYSQL::sSid[64];char C_MYSQL::sUid[64];char C_MYSQL::sPwd[64];char C_MYSQL::sErrLog[1024];pthread_mutex_t C_MYSQL::sDbLock = PTHREAD_MUTEX_INITIALIZER;MYSQL * C_MYSQL::myConnect = NULL; */C_DbConnect::C_DbConnect(){ Initialize();}C_DbConnect::~C_DbConnect(){ Destroy();}void C_DbConnect::Lock(){ pthread_mutex_lock(&sDbLock);}void C_DbConnect::Unlock(){ pthread_mutex_unlock(&sDbLock);}int C_DbConnect::Initialize(){ return pthread_mutex_init(&sDbLock, NULL);}void C_DbConnect::Destroy(){ pthread_mutex_destroy(&sDbLock);}int C_DbConnect::Connect(char* szDbUid, char* szDbPwd, char* szDbSid){ char szMsg[512]; char *a = getenv("ROOTDIR");// snprintf(sErrLog, sizeof(sErrLog), "%s/bin/ora.log", a); if(!((myConnect = mysql_init((MYSQL*)0)) && mysql_real_connect( myConnect, NULL, szDbUid, szDbPwd, szDbSid, MYSQL_PORT, NULL, 0 ))) { // logOra(sErrLog, "Connect With Error!"); return 1; }// logOra(sErrLog, "Connected!"); if(mysql_autocommit(myConnect, 0) != 0) {// logOra(sErrLog, "cannot set Autocommit=0!"); return -2; } return 0;}void C_DbConnect::Disconnect(){ if(myConnect != NULL) { mysql_close( myConnect ) ; // logOra(sErrLog, "Disonnected!"); }}#define MYSQL_PORT 3306C_MYSQL::C_MYSQL(){ m_bCreatedByDb = false; myConnect = NULL; m_pDb = new C_DbConnect(); Initialize();}C_MYSQL::C_MYSQL(C_DbConnect* pDb) : m_pDb(pDb){ m_bCreatedByDb = true; myConnect = NULL; Initialize();}C_MYSQL::~C_MYSQL(){ Destroy(); if(!m_bCreatedByDb) { if(m_pDb != NULL) { delete m_pDb; m_pDb = NULL; } }}int C_MYSQL::DbCount(const char* szSql, MYSQL* pConnect){ int a=mysql_real_query(myConnect,szSql, strlen(szSql) ); MYSQL_RES *res_ptr = mysql_store_result(myConnect); if (res_ptr == NULL) { return -1; } int num = mysql_num_rows(res_ptr); if(num != 1) { return -1; } char id[21]; id[0]=0; MYSQL_ROW sqlrow = mysql_fetch_row(res_ptr); if(sqlrow[0] != NULL) { strcat(id, sqlrow[0]); } mysql_free_result(res_ptr); return atoi(id);}int C_MYSQL::GetSeq(char* szSeqId){ char szSQL[] = {"select LAST_INSERT_ID()"}; int res = mysql_real_query(myConnect, szSQL, strlen(szSQL)); if(res != 0) { logOra(sErrLog, "%d %s\n", mysql_errno(myConnect), mysql_error(myConnect)); return -1; } MYSQL_RES *res_ptr = mysql_store_result(myConnect); if (res_ptr == NULL) { return -2; } MYSQL_ROW sqlrow = mysql_fetch_row(res_ptr); if(sqlrow[0] != NULL) { snprintf(szSeqId, LEN_SEQ+1, "%s", sqlrow[0]); printf("Last_Id=%s\n", szSeqId); } mysql_free_result(res_ptr); return 0;}void C_MYSQL::logOra(char* szFilename, char* fmt,...){ char buffer[MAXLINE]; time_t t; struct tm* t2; char szTime[40]; va_list arg_ptr; va_start(arg_ptr, fmt); vsnprintf(buffer, MAXLINE, fmt, arg_ptr); va_end(arg_ptr); t = time(0); t2 = localtime(&t); snprintf(szTime, 40, "%04d%02d%02d-%02d%02d%02d ", t2->tm_year+1900, t2->tm_mon+1, t2->tm_mday, t2->tm_hour, t2->tm_min, t2->tm_sec); char f[MAXLINE]; snprintf(f, MAXLINE, "%s", szFilename); FILE* fp = fopen(f, "a"); if(fp != NULL) { fprintf(fp, "%s %s\n", szTime, buffer); fclose(fp); } else { printf("Err=%s\n", f); }#define OUTPUT_CRT#ifdef OUTPUT_CRT printf("%s\n", buffer);#endif}void C_MYSQL::Lock(){ //pthread_mutex_lock(&sDbLock); m_pDb->Lock();}void C_MYSQL::Unlock(){ //pthread_mutex_unlock(&sDbLock); m_pDb->Unlock();}int C_MYSQL::Initialize(){ return 0;//pthread_mutex_init(&sDbLock, NULL);}void C_MYSQL::Destroy(){ //pthread_mutex_destroy(&sDbLock);}void C_MYSQL::onError(){ int nError = mysql_errno(myConnect); logOra(sErrLog, "%d %s\n", nError, mysql_error(myConnect)); if(nError == 2006) { DbDisconnect(); DbConnect(sSid,sUid,sPwd); }}int C_MYSQL::DbConnect(char* szDbUid, char* szDbPwd, char* szDbSid){ char szMsg[512]; char *a = getenv("ROOTDIR"); snprintf(sErrLog, sizeof(sErrLog), "%s/bin/ora.log", a);/* if (Initialize()) { return -1; } snprintf(sUid, 64, "%s", szDbUid); snprintf(sPwd, 64, "%s", szDbPwd); snprintf(sSid, 64, "%s", szDbSid); printf("u=%s p=%s s=%s\n", sUid,sPwd, sSid); if(!((myConnect = mysql_init((MYSQL*)0)) && mysql_real_connect( myConnect, NULL, szDbUid, szDbPwd, szDbSid, MYSQL_PORT, NULL, 0 ))) { logOra(sErrLog, "Connect With Error!"); return 1; } logOra(sErrLog, "Connected!"); if(mysql_autocommit(myConnect, 0) != 0) { logOra(sErrLog, "cannot set Autocommit=0!"); return -2; }*/ if(m_pDb->Connect(szDbUid, szDbPwd, szDbSid) != 0) { logOra(sErrLog, "cannot set Autocommit=0!"); return -2; } myConnect = m_pDb->Get(); return 0;}void C_MYSQL::DbDisconnect(){/* if(myConnect != NULL) { mysql_close( myConnect ) ; logOra(sErrLog, "Disonnected!"); } */ m_pDb->Disconnect();}int C_MYSQL::DbUpdateTable(char* pInSzSQL, struct S_RESULT* pOut){ char szSQL[SQLMAX]; snprintf(szSQL, SQLMAX, "%s", pInSzSQL);#ifdef _DEBUG logOra(sErrLog, szSQL);#endif Lock(); int res = mysql_real_query(myConnect, szSQL, strlen(szSQL)); if(res != 0) { Unlock(); logOra(sErrLog, "%d %s\n", mysql_errno(myConnect), mysql_error(myConnect)); return -1; } DbCommit(); Unlock(); return 0;}int C_MYSQL::DbUpdateTable2(char* pInSzSQL, struct S_RESULT* pOut){ char* szSQL = pInSzSQL;#ifdef _DEBUG logOra(sErrLog, szSQL);#endif Lock(); int res = mysql_real_query(myConnect, szSQL, strlen(szSQL)); if(res != 0) { Unlock(); logOra(sErrLog, "%d %s\n", mysql_errno(myConnect), mysql_error(myConnect)); return -1; } Unlock(); return 0;}int C_MYSQL::DbCommit(){ mysql_commit(myConnect); return 0;}int C_MYSQL::DbRollback(){ mysql_rollback(myConnect); return 0;}int C_MYSQL::DbReadOgtplTableCount( char *p_timeStart, int p_timeAcceptedFree, int *p_bIsFree, char *p_timeErrorStart, char *p_timeErrorEnd, int *p_nResult){ char *p_timeStart2 = p_timeStart; int p_timeAcceptedFree2 = p_timeAcceptedFree; char szSQL[SQLMAX]; snprintf(szSQL,SQLMAX, "call CheckOGtplTableRecordCount('%s',%d,@1,@2,@3,@4)", p_timeStart2, p_timeAcceptedFree2); Lock(); int res = mysql_real_query(myConnect, szSQL, strlen(szSQL)); if(res != 0) { Unlock(); logOra(sErrLog, "%d %s\n", mysql_errno(myConnect), mysql_error(myConnect)); return -1; } MYSQL_RES *res_ptr = mysql_store_result(myConnect); if (res_ptr == NULL) { Unlock(); onError(); return -1; } MYSQL_ROW sqlrow = mysql_fetch_row(res_ptr); if(sqlrow[0] != NULL) *p_bIsFree = atoi(sqlrow[0]); if(sqlrow[1] != NULL) memcpy(p_timeErrorStart, sqlrow[1], LEN_DATETIME); if(sqlrow[2] != NULL) memcpy(p_timeErrorEnd, sqlrow[2], LEN_DATETIME); if(sqlrow[3] != NULL) *p_nResult = atoi(sqlrow[3]); mysql_free_result(res_ptr); if (mysql_errno(myConnect)) { Unlock(); onError(); return -1; } Unlock(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -