亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mysql.cpp

?? mysql 完整的封裝類 ,希望有幫助 mysql 完整的封裝類 ,希望有幫助
?? CPP
字號:
// MySql.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "MySql.h"

//一個字段結構
typedef struct _FIELDS
{
	char field_name[DEFAULT_FIELD_SIZE];//字段名
	void * filed_value; //字段值的指針
	unsigned value_len; //字段的長度,只適用于字符串類型
}FIELDS,*PFIELDS;

//一行數據的結構數組
typedef struct _ROWS{
    FIELDS fields[DEFAULT_FIELD];   //字段,根據不同的應用程序可以修改此值
	int cnt;             //多少個字段,指示field中元素的有效個數
}ROWS,*PROWS;


MySql::MySql()
{
	result=NULL;
	memset(m_host,0,32);
	memset(m_name,0,32);
	memset(m_pwd,0,32);
	m_port=0;
	mysql_init(&myData);

	//設置連接超時
	unsigned timeout=5*60;
	mysql_options(&myData, MYSQL_OPT_CONNECT_TIMEOUT, (char *)&timeout);
	
	//啟動再連接
	my_bool reconnect=TRUE;
    mysql_options(&myData, MYSQL_OPT_RECONNECT, (char *)&reconnect);

	//初始化HashTable大小為100
	res.InitHashTable(100);
}
MySql::~MySql()
{
	Close();
}

//連接MySql服務器
BOOL MySql::Connect(char * host,char * name,char *pwd,char * db,unsigned port)
{
	BOOL bRet=TRUE;
	strcpy(m_host,host);
	strcpy(m_name,name);
	strcpy(m_pwd,pwd);
	m_port=port;
	do
	{
		//連接服務器
		if(mysql_real_connect(&myData,host,name,pwd,db,port,NULL,0)==NULL)
		{
			bRet=FALSE;
			break;
		}
		
		//設置連接字符集,默認為gb2312
		if(mysql_set_character_set(&myData, "gb2312"))
		{
			bRet=FALSE;
			//如果設置字符集不成功,則關閉連接
			Close();
			break;
		}
		//設置允許多語句支持
		mysql_set_server_option(&myData, MYSQL_OPTION_MULTI_STATEMENTS_ON);
	}while(0);
	return bRet;
}

//執行非查詢語句
BOOL MySql::ExecuteNoQuery(char ** sqlArray,int count)
{
	BOOL uRet=TRUE;
	//撤消自動提交模式
     mysql_autocommit(&myData, 0); 
	 for(int i=0;i<count;i++)
	 {
		 mysql_query(&myData,sqlArray[i]);
		 //查詢受影響的行數
		 //uRet=uRet+(unsigned)mysql_affected_rows(&myData); 
	 }
	 //如果沒有成功
	 if(mysql_commit(&myData))
	 {
		 //回滾事務
		 mysql_rollback(&myData);
		 uRet=FALSE;
	 }
     //恢復自動提交模式
     mysql_autocommit(&myData, 0); 
	 return uRet;
}
//執行查詢語句
unsigned MySql::ExecuteQuery(char * sql)
{
	unsigned uLine=0,uField=0;
	PROWS rows;
	MYSQL_ROW row;
	MYSQL_FIELD *pField;
    //釋放前一次的結果集
	FreeResult();
	//查詢
    mysql_query(&myData,sql);
    //存儲結果集
    result=mysql_store_result(&myData);
    //如果結果集為空,則返回0
    if(result==NULL)return 0;
    //獲得行數
    uLine=(unsigned)mysql_num_rows(result);
    //獲得字段數
    uField=(unsigned)mysql_num_fields(result);
   
   //填充結果集
   for(int i=0;i<(int)uLine;i++)
   {
	   //為存儲一行數據分配內存
      rows=(PROWS)malloc(sizeof(ROWS));
	  //一行有多少個字段
	  rows->cnt=uField;
	  //獲得一行數據
	  row=mysql_fetch_row(result);
	  for(int j=0;j<(int)uField;j++)
	  {
		 //獲得該列的相關信息
		  pField=mysql_fetch_field_direct(result, j);
		  //列名稱
		  strcpy(rows->fields[j].field_name,pField->name);
		  //列值
		  rows->fields[j].filed_value=row[j];
		  //列寬度
		  rows->fields[j].value_len=pField->max_length;
	  }
	  //將一行數據存儲到HashTable中
	  res.SetAt(i,(void *)rows);
   }
   //返回行數
   return uLine;
}

//釋放查詢的結果集
void MySql::FreeResult()
{
	int len=0;
	PROWS rows=NULL;

	len=res.GetCount();
	//釋放結果集的內存
	for(int i=0;i<len;i++)
	{
		rows=(PROWS)res[i];
		if(rows!=NULL)
		{
			free(rows);
			rows=NULL;
		}
	}
   //清空HashTable
	res.RemoveAll();
	//釋放result
    if(result!=NULL)
	{
	   mysql_free_result(result);
	}
	result=NULL;
}

//執行帶參數的SQL語句函數
BOOL MySql::ExecutePrepare(char * sql)
{
	BOOL bRet=TRUE;
	do
	{
		//初始化句柄
		myStmt=mysql_stmt_init(&myData);
		if (!myStmt)
		{
			bRet=FALSE;
			break;
		}
		//準備SQL
		if (mysql_stmt_prepare(myStmt, sql, strlen(sql)))
		{
			bRet=FALSE;
			break;
		}
	}while(0);
	return bRet;
}
BOOL MySql::BindParam(MYSQL_BIND * bind)
{
	BOOL bRet=TRUE;
	if (mysql_stmt_bind_param(myStmt, bind))
	{
       bRet=FALSE;
	}
	return bRet;

}
unsigned MySql::Execute()
{
	unsigned uRet=0;
	do
	{
		if (mysql_stmt_execute(myStmt))
		{
			uRet=0;
			break;
		}
		//獲得受影響的行數 
		uRet=(unsigned)mysql_stmt_affected_rows(myStmt);
	}while(0);
    return uRet;
}
BOOL MySql::ClosePrepare()
{
	BOOL bRet=TRUE;
	//關閉句柄
	if (mysql_stmt_close(myStmt))
	{
       bRet=FALSE;
	}
	return bRet;
}

//改變用戶
BOOL MySql::ChangeUser(char * name,char *pwd,char *db)
{
	BOOL bRet=TRUE;
	//如果失敗,返回FALSE
	if(mysql_change_user(&myData, name, pwd, db) )
	{
		bRet=FALSE;
	}
	return bRet;
}
//選擇數據庫
BOOL MySql::SelectDB(char * db)
{
	BOOL bRet=TRUE;
	if(mysql_select_db(&myData, db))
	{
		bRet=FALSE;
	}
	return bRet;
}


//關閉
void MySql::Close()
{
   //清空結果集
    FreeResult();
	//關閉連接
	mysql_close(&myData);
}


//獲取查詢的值
int MySql::GetIntValue(int row, char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	int iRet=0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			//獲得數據的字符串表示
			tmp=(char *)rows->fields[i].filed_value;
			//轉換成數字
			iRet=atoi(tmp);
			break;
		}
	}
	return iRet;
}
int MySql::GetIntValue(int row, int fd_num)
{
    PROWS rows=NULL;
	int len=0,iRet=0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

    //獲得數字的字符串表示
	tmp=(char *)rows->fields[fd_num].filed_value;
	//轉換成數字
	iRet=atoi(tmp);
	return iRet;
}

//獲得符點型值
float MySql::GetFloatValue(int row,char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	float iRet=0.0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			tmp=(char *)rows->fields[i].filed_value;
			iRet=(float)atof(tmp);
			break;
		}
	}
	return iRet;
}
float MySql::GetFloatValue(int row,int fd_num)
{
	PROWS rows=NULL;
	int len=0;
	float iRet=0.0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

    tmp=(char *)rows->fields[fd_num].filed_value;
    iRet=(float)atof(tmp);
	return iRet;
}

//獲得高精度符點型值
double MySql::GetDoubleValue(int row,char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	double iRet=0.0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			tmp=(char *)rows->fields[i].filed_value;
		    iRet=atof(tmp);
			break;
		}
	}
	return iRet;
}
double MySql::GetDoubleValue(int row,int fd_num)
{
	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	double iRet=0.0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

	tmp=(char *)rows->fields[fd_num].filed_value;
	iRet=atof(tmp);
	return iRet;
}

//獲得布爾型值
BOOL MySql::GetBoolValue(int row,char * fd_name)
{
   	PROWS rows=NULL;
	int len=0;
	char * tmp=NULL;
	BOOL iRet=0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			tmp=(char *)rows->fields[i].filed_value;
			iRet=(BOOL)atoi(tmp);
			break;
		}
	}
	return iRet;
}
BOOL MySql::GetBoolValue(int row,int fd_num)
{
	PROWS rows=NULL;
	int len=0;
	BOOL iRet=0;
	char * tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

	tmp=(char *)rows->fields[fd_num].filed_value;
	iRet=(BOOL)atoi(tmp);
	return iRet;
}

char * MySql::GetStringValue(int row,char * fd_name,unsigned * length)
{
	PROWS rows=NULL;
	int len=0;
	char *p_Tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			*length=(unsigned)(rows->fields[i].value_len);
			p_Tmp=(char *)(rows->fields[i].filed_value);
			break;
		}
	}
	return p_Tmp;
}
char * MySql::GetStringValue(int row,int fd_num, unsigned * length)
{
	PROWS rows=NULL;
	int len=0;
	char * p_Tmp=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];

	//獲得列長度
	*length=(unsigned)rows->fields[fd_num].value_len;
	//直接返回此列的值
	p_Tmp=(char *)(rows->fields[fd_num].filed_value);
	return p_Tmp;
}

//獲得日期時間型數據
char * MySql::GetDataTimeValue(int row,char * fd_name)
{
	PROWS rows=NULL;
	int len=0;
	char * pTime=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return NULL;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
			pTime=(char *)(rows->fields[i].filed_value);
			break;
		}
	}
	return pTime;
}
char * MySql::GetDataTimeValue(int row, int fd_num)
{
   	PROWS rows=NULL;
	int len=0;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return NULL;
	rows=(PROWS)res[row];

	//直接返回此列的值
	return (char *)(rows->fields[fd_num].filed_value);
}

//獲得二進制數據的緩沖區
int MySql::GetBinaryValue(int row,char * fd_name,char * pBuf)
{
	PROWS rows=NULL;
	int len=0;
	char * p=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return 0;
	rows=(PROWS)res[row];
	//查找列
	for(int i=0;i<rows->cnt;i++)
	{
		if(!strcmp(rows->fields[i].field_name,fd_name))
		{
		    len=(int)rows->fields[i].value_len;
			if(pBuf==NULL)
				break;
			p=(char *)(rows->fields[i].filed_value);
			memcpy(pBuf,p,len);
			break;
		}
	}
	return len;
}
int MySql::GetBinaryValue(int row,int fd_num,char * pBuf)
{
	PROWS rows=NULL;
	int len=0;
	char * p=NULL;
	len=res.GetCount();
	//如果行號超過了范圍,則返回0
	if(row>=len)return NULL;
	rows=(PROWS)res[row];
    
	len=rows->fields[fd_num].value_len;

	if(pBuf==NULL)
		return len;
  
	//直接返回此列的值
	 p=(char *)(rows->fields[fd_num].filed_value);
	 memcpy(pBuf,p,len);
	 return len;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美经典一区二区| 国产不卡在线一区| 成人在线视频一区二区| 欧美体内she精视频| 欧美精品一区二区三区很污很色的| 国产精品沙发午睡系列990531| 亚洲第一激情av| 福利电影一区二区| 日韩欧美的一区二区| 亚洲国产一区二区在线播放| 99久久精品免费精品国产| 久久午夜国产精品| 日韩国产成人精品| 91黄色免费版| 一区二区中文视频| 豆国产96在线|亚洲| 久久毛片高清国产| 精品在线一区二区三区| 在线播放欧美女士性生活| 伊人性伊人情综合网| 成人高清视频在线观看| 中文av一区二区| 岛国精品在线观看| 久久久国产综合精品女国产盗摄| 麻豆精品一区二区综合av| 欧美日韩一区三区| 亚洲福利视频一区| 欧美日本在线播放| 亚洲成人第一页| 欧美日韩免费一区二区三区 | 在线一区二区三区做爰视频网站| 亚洲国产激情av| 成人综合婷婷国产精品久久蜜臀| 国产视频一区不卡| 成人18视频在线播放| 国产精品久久久久婷婷二区次 | 日本成人在线电影网| 欧美色图一区二区三区| 亚洲成av人片在线观看| 678五月天丁香亚洲综合网| 秋霞成人午夜伦在线观看| 91精品国产综合久久国产大片| 日韩高清一区二区| 精品国产不卡一区二区三区| 国产大片一区二区| 中文字幕中文字幕在线一区| 91免费看片在线观看| 亚洲国产另类av| 欧美一级日韩一级| 国产一区二区三区综合| 国产午夜精品一区二区三区嫩草| 成人综合在线网站| 亚洲国产一区在线观看| 精品国产制服丝袜高跟| 成人国产精品免费观看动漫| 一区二区三区在线不卡| 欧美一区二区三区系列电影| 国产精一品亚洲二区在线视频| 欧美国产精品一区| 欧美日韩精品一区二区三区四区 | 国产欧美日韩精品在线| 91精品福利视频| 狠狠狠色丁香婷婷综合激情| 中文av一区特黄| 欧美精品免费视频| 国产精品77777| 伊人一区二区三区| 亚洲精品一区二区精华| 99久久精品一区| 青娱乐精品视频| 国产精品夫妻自拍| 日韩欧美你懂的| 99久久国产综合色|国产精品| 午夜欧美一区二区三区在线播放| 精品久久久久久最新网址| 一本久久a久久精品亚洲| 久久国产婷婷国产香蕉| 亚洲乱码中文字幕| 国产亚洲自拍一区| 欧美日韩国产经典色站一区二区三区| 国产综合色在线| 婷婷国产在线综合| 中文字幕在线不卡视频| 精品精品国产高清a毛片牛牛| 91一区在线观看| 国产高清亚洲一区| 青青草伊人久久| 亚洲国产欧美一区二区三区丁香婷| 久久欧美一区二区| 欧美日本一区二区| 色天使久久综合网天天| 国产盗摄女厕一区二区三区| 日本不卡123| 性做久久久久久免费观看| 最新不卡av在线| 国产欧美一区二区三区在线看蜜臀| 制服丝袜亚洲播放| 欧美在线观看18| 99在线热播精品免费| 国产白丝精品91爽爽久久| 国产一区二区毛片| 精品一区二区三区香蕉蜜桃 | 成人黄色在线看| 国产综合成人久久大片91| 日本vs亚洲vs韩国一区三区| 亚洲国产成人精品视频| 亚洲五码中文字幕| 午夜亚洲国产au精品一区二区| 国产精品毛片无遮挡高清| 国产三级欧美三级日产三级99| 精品国产免费人成电影在线观看四季| 欧美日韩日日骚| 欧美三级日本三级少妇99| 91福利在线导航| 欧美日韩综合色| 欧美日韩第一区日日骚| 欧美亚洲综合久久| 欧美挠脚心视频网站| 欧美日韩不卡一区二区| 欧美精品久久久久久久多人混战| 欧美日韩激情一区| 日韩欧美中文一区| 久久午夜电影网| 国产精品午夜在线观看| 亚洲日本丝袜连裤袜办公室| 亚洲品质自拍视频| 亚洲成a人片综合在线| 青青草精品视频| 国产精品亚洲午夜一区二区三区| 国产真实精品久久二三区| 高清国产午夜精品久久久久久| 成人高清视频免费观看| 欧美婷婷六月丁香综合色| 欧美一级淫片007| 国产色产综合色产在线视频| 中文字幕在线不卡视频| 午夜a成v人精品| 极品少妇xxxx精品少妇| av一区二区三区四区| 欧美日韩亚洲国产综合| 日韩欧美一区二区视频| 亚洲国产精品精华液ab| 亚洲综合色婷婷| 狠狠色狠狠色综合| 99r国产精品| 日韩一区二区三区观看| 国产精品视频一二三| 日韩综合小视频| www.欧美色图| 91精品一区二区三区久久久久久 | 97se亚洲国产综合在线| 色哟哟欧美精品| 欧美变态tickling挠脚心| 国产精品情趣视频| 午夜伊人狠狠久久| 国产福利91精品一区| 欧美性xxxxx极品少妇| 久久久久久久久久看片| 亚洲va欧美va国产va天堂影院| 国产一区二区三区精品欧美日韩一区二区三区 | 久久精品人人做| 亚洲二区在线观看| 国产成人亚洲综合a∨猫咪| 欧美性做爰猛烈叫床潮| 久久久精品黄色| 日韩成人免费看| 色999日韩国产欧美一区二区| 精品成人私密视频| 午夜精品久久久久久| 不卡电影一区二区三区| 欧美mv和日韩mv国产网站| 一区二区三区国产豹纹内裤在线| 国产精品99久| 欧美videos中文字幕| 亚洲成人动漫精品| 色狠狠一区二区| 国产精品乱人伦| 国产成人综合视频| 91精品国产综合久久婷婷香蕉 | 91视频免费看| 国产亚洲欧美激情| 精品一区二区三区久久| 欧美日韩国产在线播放网站| 亚洲色欲色欲www| 成人午夜视频福利| 久久蜜桃一区二区| 国内精品视频666| 精品国产免费视频| 久久99精品国产91久久来源| 91精品在线观看入口| 午夜婷婷国产麻豆精品| 欧美日韩综合不卡| 亚洲成人1区2区| 欧美久久一区二区| 亚洲精选在线视频| 日本va欧美va精品| 欧美一区二区三区爱爱| 婷婷中文字幕综合| 欧美日韩精品免费| 喷白浆一区二区|