db_mysql.cpp
来自「网络泡泡被.net管理」· C++ 代码 · 共 176 行
CPP
176 行
// DB_mySQL.cpp: implementation of the DB_mySQL class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DB.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DB_mySQL::DB_mySQL()
{
m_handle = NULL;
m_res = NULL;
}
DB_mySQL::~DB_mySQL()
{
Close();
}
bool DB_mySQL::Connect(const char *host, int port,const char *name,const char *pwd,const char *db)
{
Close();
m_handle = mysql_init(NULL);
if (m_handle==NULL) return false;
if (port == 0) port = MYSQL_PORT;
if (mysql_real_connect(m_handle, host, name, pwd, NULL, port, NULL, 0) == NULL)
{
ShowError();
return false;
}
if (mysql_select_db(m_handle, db) != 0)
{
ShowError();
return false;
}
return true;
}
void DB_mySQL::Close()
{
if (m_handle)
{
mysql_close(m_handle);
m_handle = NULL;
}
if (m_res)
{
mysql_free_result(m_res);
m_res = NULL;
}
}
bool DB_mySQL::Query(const char *sql,int len)
{
if (!m_handle) return false;
if (len == 0) len = strlen(sql);
if (mysql_real_query(m_handle, sql, len) != 0)
{
ShowError();
return false;
}
if (m_res != NULL) mysql_free_result(m_res);
m_res = mysql_store_result(m_handle);
if (m_res != NULL)
{
m_fieldCnt = mysql_num_fields(m_res);
m_fields = mysql_fetch_fields(m_res);
}
return true;
}
bool DB_mySQL::Query(const char *format,...)
{
int pos = 0;
va_list args;
va_start(args, format);
pos += VSNPRINTF(m_strCMD+pos,DEFAULT_SQL_CMD_SIZE,format, args);
va_end(args);
return Query(m_strCMD, pos);
}
int DB_mySQL::GetFieldCount()
{
return m_fieldCnt;
}
int DB_mySQL::GetRowCount()
{
return (int)mysql_num_rows(m_res);
}
void DB_mySQL::ShowError()
{
Sys_Log("net_lib_log", "SQL EER = [%s]", mysql_error(m_handle));
}
bool DB_mySQL::GetRow()
{
m_row = mysql_fetch_row(m_res);
if (m_row == NULL) return false;
return true;
}
char *DB_mySQL::GetField(char *fname, int *pnLen)
{
int i;
unsigned long *lengths;
lengths = mysql_fetch_lengths(m_res);
for(i = 0; i < m_fieldCnt; i++)
{
if (strcmp(fname,m_fields[i].name)==0)
{
if(pnLen) *pnLen = lengths[i];
return m_row[i];
}
}
return NULL;
}
//-------------------------------------
// Get Field Name , Data Type And Value
//-------------------------------------
bool DB_mySQL::GetField(int idx,char *field,int *type,char **value)
{
if(idx<0 || idx>m_fieldCnt)
return false;
strcpy(field,m_fields[idx].name);
*type = m_fields[idx].type;
*value = m_row[idx];
return true;
}
//------------------------
// Get Field Name And Type
//------------------------
int DB_mySQL::GetFieldInfo(int nIdx, char *pszName)
{
if(nIdx<0 || nIdx>=m_fieldCnt)
{
return 0;
}
if(pszName)
{
strcpy(pszName, m_fields[nIdx].name);
}
return m_fields[nIdx].type;
}
//------------------------------
// Get Field Data Type And Value
//------------------------------
bool DB_mySQL::GetFieldContent(int nIdx , int *pnType , char **ppValue)
{
if(nIdx<0 || nIdx>=m_fieldCnt)
{
return false;
}
*pnType = m_fields[nIdx].type;
*ppValue = m_row[nIdx];
return true;
}
unsigned long DB_mySQL::GetInsertId()
{
return (uint32)mysql_insert_id(m_handle);
}
long DB_mySQL::GetAffectedRows()
{
return (unsigned long)mysql_affected_rows(m_handle);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?