AMPS:MySQL数据库操作模块源码解读

来源:互联网 发布:网络层主要协议 编辑:程序博客网 时间:2024/06/07 06:36

  本节看看在AMPS中对MySQL数据库的访问操作,它使用MySQL提供的C API接口进行访问,具体各API的使用可参考http://dev.mysql.com/doc/refman/5.6/en/c-api-function-overview.html。

 下面看看AMPS中的实现:

  AMPS_MySQL.h

#ifndef __HEADER_AMPS_MYSQL_ENGINE_H#define __HEADER_AMPS_MYSQL_ENGINE_H#ifdef __cplusplusextern "C" {#endif#include "AMPS_Defines.h"#include "AMPS_LinkList.h"#include "AMPS_MemMgt.h"#include "AMPS_EventSystem.h"#include "AMPS_Core.h"#include "AMPS_API.h"int MySQL_Init(void* r_pvAMPSContext, void* r_pvBDEngineContext);void MySQL_Cleanup(void* r_pvAMPSContext, void* r_pvBDEngineContext);int MySQL_Query(void* r_pvAMPSContext, void* r_pvBDEngineContext, const char* r_pcchQueryStatement, unsigned long r_ulLengthOfQuery, t_AMPSDBEngineResult* r_poAMPSDBEngineResult);int MySQL_GetNumberOfRecords(void* r_pvAMPSContext, void* r_pvBDEngineContext, unsigned long* r_pulNumberOfResults);int MySQL_GetResults(void* r_pvAMPSContext, void* r_pvBDEngineContext, t_AMPSDBEngineResult* r_poAMPSDBEngineResult);void MySQL_FreeResults(void* r_pvAMPSContext, void* r_pvBDEngineContext, t_AMPSDBEngineResult* r_poAMPSDBEngineResult);void* MySQL_StatementInit(void* r_pvAMPSContext, void* r_pvBDEngineContext);int   MySQL_StatementPrepare(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement, const char* r_puchQuery, int r_nQueryLength);int MySQL_StatementParamCount(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement);void* MySQL_CreateBindParameters(void* r_pvAMPSContext, void* r_pvDBEngineContext, int r_nNumberOfBindings);void  MySQL_SetBindingParameter(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvCDRStatementParams, int r_nBindRecord, int r_nBufferType,   char* r_pchBuffer, int r_nBufferLength, unsigned long* r_nLength);int MySQL_BindParameters(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement, void* r_pvBind);int MySQL_Execute(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement);int MySQL_StatementClose(void* r_pvAMPSContext, void* r_pvStatement);#ifdef __cplusplus}#endif#endif //__HEADER_AMPS_MYSQL_ENGINE_H


AMPS_MySQL.c

#include "AMPS_DBEngine.h"#include "AMPS_MySQL.h"#include "Mysql.h"/*****************************************************************函数名称: MySQL_Init功能描述: MySQL数据库初始化函数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文出参:      返回值:      int*****************************************************************/int MySQL_Init(void* r_pvAMPSContext, void* r_pvBDEngineContext){t_BDEngineContext* poBDEngineContext = r_pvBDEngineContext;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");poBDEngineContext->unDBPort = 0;poBDEngineContext->ulClientFlag = CLIENT_MULTI_RESULTS;    /*初始化*/poBDEngineContext->poDBHandle = mysql_init(poBDEngineContext->poDBHandle); if(NULL == poBDEngineContext->poDBHandle){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_init failed.\n");AMPS_InternalFree(poBDEngineContext);    return AMPS_ERROR_FAILURE;}    /*连接*/ if(NULL == mysql_real_connect((MYSQL*)(poBDEngineContext->poDBHandle), poBDEngineContext->pchHostName, poBDEngineContext->pchUserName, poBDEngineContext->pchPassword, poBDEngineContext->pchDataBaseName, poBDEngineContext->unDBPort, poBDEngineContext->pchUnixSocket, poBDEngineContext->ulClientFlag)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_real_connect failed: Error: %s\n", mysql_error((MYSQL*)(poBDEngineContext->poDBHandle)));mysql_close((MYSQL*)(poBDEngineContext->poDBHandle));AMPS_InternalFree(poBDEngineContext);    return AMPS_ERROR_FAILURE;}    /*设置数据库*/ if(0 != mysql_select_db((MYSQL*)(poBDEngineContext->poDBHandle), poBDEngineContext->pchDataBaseName)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_select_db failed: Error: %s\n", mysql_error((MYSQL*)(poBDEngineContext->poDBHandle)));mysql_close((MYSQL*)(poBDEngineContext->poDBHandle));AMPS_InternalFree(poBDEngineContext);    return AMPS_ERROR_FAILURE;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}/*****************************************************************函数名称: MySQL_Cleanup功能描述: MySQL数据库销毁函数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文出参:      返回值:      int*****************************************************************/void MySQL_Cleanup(void* r_pvAMPSContext, void* r_pvBDEngineContext){t_BDEngineContext* poBDEngineContext = (t_BDEngineContext*)r_pvBDEngineContext;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");    /*关闭数据库*/mysql_close((MYSQL*)(poBDEngineContext->poDBHandle));//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");}/*****************************************************************函数名称: MySQL_Query功能描述: MySQL数据库销毁函数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      const char* r_pcchQueryStatement SQL查询语句      unsigned long r_ulLengthOfQuery  SQL查询语句长度      t_AMPSDBEngineResult* r_poBDEngineResult 查询结果出参:      返回值:      int*****************************************************************/int MySQL_Query(void* r_pvAMPSContext, void* r_pvBDEngineContext, const char* r_pcchQueryStatement, unsigned long r_ulLengthOfQuery, t_AMPSDBEngineResult* r_poBDEngineResult){t_BDEngineContext* poBDEngineContext = (t_BDEngineContext*)r_pvBDEngineContext;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG_2, "poBDEngineContext->poDBHandle = %p, r_pcchQueryStatement = %s, r_ulLengthOfQuery = %d.\n",poBDEngineContext->poDBHandle, r_pcchQueryStatement, r_ulLengthOfQuery);    /*执行查询语句*/    if(0 != mysql_real_query((MYSQL*)(poBDEngineContext->poDBHandle), r_pcchQueryStatement, r_ulLengthOfQuery)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_real_query failed: Error: %s\n", mysql_error((MYSQL*)(poBDEngineContext->poDBHandle)));r_poBDEngineResult->ulNumberOfResults = 0;r_poBDEngineResult->ulNumberOfRows = 0;    return AMPS_ERROR_FAILURE;}/*if(AMPS_SUCCESS != MySQL_GetNumberOfRecords(r_pvAMPSContext, r_pvBDEngineContext, &r_poBDEngineResult->ulNumberOfResults)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "MySQL_GetNumberOfRecords failed.\n");r_poBDEngineResult->ulNumberOfResults = 0;r_poBDEngineResult->ulNumberOfRows = 0;return AMPS_ERROR_FAILURE;}*/    /*获取查询结果*/if(AMPS_SUCCESS != MySQL_GetResults(r_pvAMPSContext, r_pvBDEngineContext, r_poBDEngineResult)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "MySQL_GetResults failed.\n");r_poBDEngineResult->ulNumberOfResults = 0;r_poBDEngineResult->ulNumberOfRows = 0;return AMPS_ERROR_FAILURE;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}/*****************************************************************函数名称: MySQL_GetNumberOfRecords功能描述: 获取记录条数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      unsigned long* r_pulNumberOfResults 记录条数出参:      返回值:      int*****************************************************************/int MySQL_GetNumberOfRecords(void* r_pvAMPSContext, void* r_pvBDEngineContext, unsigned long* r_pulNumberOfResults){t_BDEngineContext* poBDEngineContext = (t_BDEngineContext*)r_pvBDEngineContext;MYSQL_RES* pvResultObj = NULL;unsigned long ulNumberOfRows = 0;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");    /*取结果集*/pvResultObj = mysql_store_result((MYSQL*)(poBDEngineContext->poDBHandle)); if(NULL == pvResultObj){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_store_result failed: Error: %s\n", mysql_error((MYSQL*)(poBDEngineContext->poDBHandle)));    return AMPS_ERROR_FAILURE;}    /*获取行数*/ulNumberOfRows = (unsigned long)mysql_num_rows(pvResultObj);//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "No of Rows %lu.\n", ulNumberOfRows);*r_pulNumberOfResults = ulNumberOfRows;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}/*****************************************************************函数名称: MySQL_GetResults功能描述: 获取查询结果入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      t_AMPSDBEngineResult* r_poBDEngineResult 查询结果出参:      返回值:      int*****************************************************************/int MySQL_GetResults(void* r_pvAMPSContext, void* r_pvBDEngineContext, t_AMPSDBEngineResult* r_poBDEngineResult){t_BDEngineContext* poBDEngineContext = (t_BDEngineContext*)r_pvBDEngineContext;unsigned long* pulLengthOfField = NULL;  unsigned long ulRowCounter = 0;  unsigned long ulColumnCounter = 0;MYSQL_ROW oMYSQLRow;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");    /*获取查询结果*/r_poBDEngineResult->pvResultObj = mysql_store_result((MYSQL*)(poBDEngineContext->poDBHandle)); if(NULL == r_poBDEngineResult->pvResultObj){if(0 == mysql_field_count((MYSQL*)(poBDEngineContext->poDBHandle))){return AMPS_SUCCESS;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_store_result failed: Error: %s\n", mysql_error((MYSQL*)(poBDEngineContext->poDBHandle)));    return AMPS_ERROR_FAILURE;}    /*返回结果集中的行数*/r_poBDEngineResult->ulNumberOfRows = (unsigned long)mysql_num_rows((MYSQL_RES*)(r_poBDEngineResult->pvResultObj));//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "No of Rows %lu.\n", r_poBDEngineResult->ulNumberOfRows);r_poBDEngineResult->ulNumberOfResults = r_poBDEngineResult->ulNumberOfRows;    /*返回结果集中的列数*/r_poBDEngineResult->ulNumberOfColumns = mysql_field_count((MYSQL*)(poBDEngineContext->poDBHandle));//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "No of Columns %lu, No of Rows %lu.\n", r_poBDEngineResult->ulNumberOfColumns, r_poBDEngineResult->ulNumberOfResults);    /*逐行,再逐列获取结果*/if (0 < r_poBDEngineResult->ulNumberOfRows) {        /*这块内存在查询结果销毁时释放*/r_poBDEngineResult->ppoAMPSDBEngineTable = (t_AMPSDBEngineTable**)AMPS_InternalMalloc(sizeof(t_AMPSDBEngineTable*) * r_poBDEngineResult->ulNumberOfRows);if(NULL == r_poBDEngineResult->ppoAMPSDBEngineTable){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "AMPS_InternalMalloc failed for r_poBDEngineResult->ppoAMPSDBEngineTable.\n");mysql_free_result(r_poBDEngineResult->pvResultObj);return AMPS_ERROR_FAILURE;}//printf("\n\n r_poBDEngineResult->ulNumberOfRows is %ld  r_poBDEngineResult->ulNumberOfColumns %ld and r_poBDEngineResult->ppoAMPSDBEngineTable %p\n\n",r_poBDEngineResult->ulNumberOfRows, r_poBDEngineResult->ulNumberOfColumns, r_poBDEngineResult->ppoAMPSDBEngineTable);for(ulRowCounter = 0; ulRowCounter < r_poBDEngineResult->ulNumberOfRows; ulRowCounter++){oMYSQLRow = mysql_fetch_row((MYSQL_RES*)(r_poBDEngineResult->pvResultObj));pulLengthOfField = mysql_fetch_lengths((MYSQL_RES*)(r_poBDEngineResult->pvResultObj));r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter] = (t_AMPSDBEngineTable*)AMPS_InternalMalloc(sizeof(t_AMPSDBEngineTable) * r_poBDEngineResult->ulNumberOfColumns);if(NULL == r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter]){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "AMPS_InternalMalloc failed for r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter].\n");mysql_free_result(r_poBDEngineResult->pvResultObj);return AMPS_ERROR_FAILURE;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "Pointer = %p.\n",  r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter]);for(ulColumnCounter = 0; ulColumnCounter < r_poBDEngineResult->ulNumberOfColumns; ulColumnCounter++){////TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "Column %u is %lu bytes in length and value %s.\n", (ulColumnCounter + 1), pulLengthOfField[ulColumnCounter], oMYSQLRow[ulColumnCounter]);r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter][ulColumnCounter].nLengthOfField = pulLengthOfField[ulColumnCounter];////TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "Field Length = %d.\n", r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter][ulColumnCounter].nLengthOfField);r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter][ulColumnCounter].pchField = oMYSQLRow[ulColumnCounter];////TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "Filed Value = %s.\n", r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter][ulColumnCounter].pchField);}}}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}/*****************************************************************函数名称: MySQL_FreeResults功能描述: 释放结果集占用的资源入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      t_AMPSDBEngineResult* r_poBDEngineResult 查询结果出参:      返回值:      int*****************************************************************/void MySQL_FreeResults(void* r_pvAMPSContext, void* r_pvBDEngineContext, t_AMPSDBEngineResult* r_poBDEngineResult){//t_BDEngineContext* poBDEngineContext = (t_BDEngineContext*)r_pvBDEngineContext;  unsigned long ulRowCounter = 0;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "No of Rows %lu.\n", r_poBDEngineResult->ulNumberOfRows);if (0 < r_poBDEngineResult->ulNumberOfRows) {for(ulRowCounter = 0; ulRowCounter < r_poBDEngineResult->ulNumberOfRows; ulRowCounter++){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_DEBUG, "Free Counter %lu.\n", ulRowCounter);//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "Pointer = %p.\n",  r_poBDEngineResult)->ppoAMPSDBEngineTable[ulRowCounter]);AMPS_InternalFree(r_poBDEngineResult->ppoAMPSDBEngineTable[ulRowCounter]);}r_poBDEngineResult->ulNumberOfColumns = 0;r_poBDEngineResult->ulNumberOfRows = 0;r_poBDEngineResult->ulNumberOfResults = 0;AMPS_InternalFree(r_poBDEngineResult->ppoAMPSDBEngineTable );}    /*释放结果内存*/mysql_free_result(r_poBDEngineResult->pvResultObj);//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");}/*****************************************************************函数名称: MySQL_StatementInit功能描述: 创建一个MYSQL_STMT句柄入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/void* MySQL_StatementInit(void* r_pvAMPSContext, void* r_pvBDEngineContext){t_BDEngineContext* poBDEngineContext = (t_BDEngineContext*)r_pvBDEngineContext;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return mysql_stmt_init((MYSQL*)(poBDEngineContext->poDBHandle));}/*****************************************************************函数名称: MySQL_StatementInit功能描述: 通过STMT方式执行SQL前的语句分析入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      void* r_pvStatement  STMT句柄      const char* r_puchQuery SQL语句      int r_nQueryLength  SQL长度出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/int MySQL_StatementPrepare(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement, const char* r_puchQuery, int r_nQueryLength){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");if (mysql_stmt_prepare((MYSQL_STMT*)r_pvStatement, r_puchQuery, r_nQueryLength)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_stmt_prepare(), INSERT failed %s\n", mysql_stmt_error((MYSQL_STMT*)r_pvStatement));return AMPS_ERROR_FAILURE;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}/*****************************************************************函数名称: MySQL_StatementParamCount功能描述: 通过STMT方式执行SQL时所带参数个数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      void* r_pvStatement  STMT句柄出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/int MySQL_StatementParamCount(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return mysql_stmt_param_count((MYSQL_STMT*)r_pvStatement);}/*****************************************************************函数名称: MySQL_CreateBindParameters功能描述: 绑定参数前分配内存入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      int r_nNumberOfBindings 参数个数出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/void* MySQL_CreateBindParameters(void* r_pvAMPSContext, void* r_pvDBEngineContext, int r_nNumberOfBindings){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_InternalMalloc(sizeof(MYSQL_BIND) * r_nNumberOfBindings);}/*****************************************************************函数名称: MySQL_SetBindingParameter功能描述: 设置绑定参数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      int r_nBindRecord  参数记录索引      int r_nBufferType 参数类型,如MYSQL_TYPE_STRING、MYSQL_TYPE_TINY等  char* r_pchBuffer 字段名称  int r_nBufferLength 字段长度  unsigned long* r_nLength 结果长度出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/void  MySQL_SetBindingParameter(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvCDRStatementParams, int r_nBindRecord, int r_nBufferType,   char* r_pchBuffer, int r_nBufferLength, unsigned long* r_nLength){MYSQL_BIND* poMySqlBind = (MYSQL_BIND*)r_pvCDRStatementParams;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");poMySqlBind[r_nBindRecord].buffer_type = r_nBufferType;poMySqlBind[r_nBindRecord].buffer = r_pchBuffer;poMySqlBind[r_nBindRecord].buffer_length= r_nBufferLength;poMySqlBind[r_nBindRecord].is_null= 0;poMySqlBind[r_nBindRecord].length= r_nLength;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");}/*****************************************************************函数名称: MySQL_BindParameters功能描述: 绑定参数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      void* r_pvStatement  STMS句柄      void* r_pvBind       绑定参数内容出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/int MySQL_BindParameters(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement, void* r_pvBind){MYSQL_BIND* poMySqlBind = (MYSQL_BIND*)r_pvBind;MYSQL_STMT* poMySqlStmt = (MYSQL_STMT*)r_pvStatement;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");if (mysql_stmt_bind_param(poMySqlStmt, poMySqlBind)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_stmt_bind_param(), INSERT failed %s\n", mysql_stmt_error((MYSQL_STMT*)r_pvStatement));return AMPS_ERROR_FAILURE;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}/*****************************************************************函数名称: MySQL_Execute功能描述: 绑定参数入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvBDEngineContext 数据库应用上下文      void* r_pvStatement  STMS句柄出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/int MySQL_Execute(void* r_pvAMPSContext, void* r_pvDBEngineContext, void* r_pvStatement){MYSQL_STMT* poMySqlStmt = (MYSQL_STMT*)r_pvStatement;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");    /*执行域处理查询语句*/if (mysql_stmt_execute(poMySqlStmt)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, "mysql_stmt_execute(), INSERT failed %s\n", mysql_stmt_error((MYSQL_STMT*)r_pvStatement));return AMPS_ERROR_FAILURE;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}/*****************************************************************函数名称: MySQL_StatementClose功能描述: STMS句柄释放入参::      void* r_pvAMPSContext APMS应用上下文      void* r_pvStatement  STMS句柄出参:      返回值:      MYSQL_STMT*类型的句柄*****************************************************************/int MySQL_StatementClose(void* r_pvAMPSContext, void* r_pvStatement){MYSQL_STMT* poMySqlStmt = (MYSQL_STMT*)r_pvStatement;//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Entering.\n");    if (mysql_stmt_close(poMySqlStmt)){//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_ERROR, " failed while closing the statement %s\n", mysql_stmt_error(poMySqlStmt));        return AMPS_ERROR_FAILURE;}//TRACE( DBE_TRACE_ID(r_pvAMPSContext), AMPS_TRACE_LEVEL_INFO, "Leaving.\n");return AMPS_SUCCESS;}


原创粉丝点击