sqlgetdatatest.cpp

来自「MySQL数据库开发源码 值得一看哦」· C++ 代码 · 共 359 行

CPP
359
字号
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */ /** * @file SQLGetDataTest.cpp */#include <common.hpp>using namespace std;#define GD_MESSAGE_LENGTH 200SQLHSTMT     GD_hstmt;SQLHENV      GD_henv;SQLHDBC      GD_hdbc;SQLHDESC     GD_hdesc;void GetData_DisplayError(SQLSMALLINT GD_HandleType, SQLHSTMT GD_InputHandle);/**  * Test to retrieve data for a single unbound column * in the current row of a result data set * * Tests: * -# Test1 There is no fetched rowset associated with S * -# Test2 column number is less than zero * -# Test3 fetched rowset is empty * @return Zero, if test succeeded */int SQLGetDataTest(){  SQLRETURN    retcode;  SQLCHAR      ColumnName;  SQLINTEGER   CustID;  //  SQLCHAR      Name, Address, Phone;  SQLCHAR SQLStmt [120];  SQLCHAR SQLStmt1 [120];  //************************************  //** Allocate An Environment Handle **  //************************************  retcode = SQLAllocHandle(SQL_HANDLE_ENV, 			   SQL_NULL_HANDLE, 			   &GD_henv);    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)    ndbout << "Allocated an environment Handle!" << endl;  //*********************************************  //** Set the ODBC application Version to 3.x **  //*********************************************  retcode = SQLSetEnvAttr(GD_henv,			  SQL_ATTR_ODBC_VERSION, 			  (SQLPOINTER) SQL_OV_ODBC3, 			  SQL_IS_UINTEGER);    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)    ndbout << "Set the ODBC application Version to 3.X!" << endl;  //**********************************  //** Allocate A Connection Handle **  //**********************************  retcode = SQLAllocHandle(SQL_HANDLE_DBC, 			   GD_henv, 			   &GD_hdbc);  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)    ndbout << "Allocated a connection Handle!" << endl;  // *******************  // ** Connect to DB **  // *******************  retcode = SQLConnect(GD_hdbc, 		       (SQLCHAR *) connectString(), 		       SQL_NTS, 		       (SQLCHAR *) "", 		       SQL_NTS, 		       (SQLCHAR *) "", 		       SQL_NTS);    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)    ndbout << "Connected to DB : OK!" << endl;  else     {        ndbout << "Failure to Connect DB!" << endl;      return NDBT_FAILED;    }  //*******************************  //** Allocate statement handle **  //*******************************    retcode = SQLAllocHandle(SQL_HANDLE_STMT, 			   GD_hdbc, 			   &GD_hstmt);   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)     ndbout << "Allocated a statement handle!" << endl;  //*****************************  //** Define SELECT statement **  //*****************************  strcpy((char *) SQLStmt, "SELECT * FROM Customers");  //***********************************  //** Prepare SELECT SQL statement  **  //***********************************  retcode = SQLPrepare(GD_hstmt, 		       SQLStmt, 		       SQL_NTS);  ndbout << endl << "Preparing SELECT, retcode = SQLprepare()= " 	 << retcode << endl;  //*********************************  //** Execute prepared statement  **  //*********************************  //  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)   //{  retcode = SQLExecute(GD_hstmt);  ndbout << "Exexuting SELECT, retcode = SQLExecute()= " 	 << retcode << endl;  //  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)   //    {      //*****************************************************************      //** Test1                                                       **      //** There is no fetched rowset associated with S(SQL-statement) **      //*****************************************************************            retcode = SQLGetData(GD_hstmt, 			   1, 			   SQL_C_SLONG, 			   &CustID,			   sizeof(CustID), 			   NULL);      ndbout << "retcode = SQLGetData()= " << retcode << endl;            if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)	{	  ndbout << endl << "Test 1:" << endl;	  ndbout << "There is no fetched rowset associated with SQL" 		 << " statement. But system reported SUCCESS or" 		 << " SUCCESS_WITH_INFO. Please check the function!" << endl;	  GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);	}      else if (retcode == SQL_ERROR)	{	  ndbout << endl << "Test 1:" << endl;	  ndbout << "There is no fetched rowset associated with SQL" 		 << " statement. The system reported ERROR " 		 << " The function is OK!" << endl;	}            else 	ndbout << endl;      //*******************************      //** Fetch Data from database  **      //*******************************      retcode = SQLFetch(GD_hstmt);      ndbout << endl 	     << "Fetching after Executing SELECT, retcode = SQLFetch()= " 	     << retcode << endl;        if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)	{	  	  //**************************************	  //** Test2                            **	  //** column number is less than zero  **	  //**************************************	  	  retcode = SQLGetData(GD_hstmt, 			       0, 			       SQL_C_ULONG, 			       &CustID, 			       sizeof(CustID), 			       NULL);	  	  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)	    {	      ndbout << "Test 2:" <<"Column number is less than zero" 		     << " The system reported SUCCESS or SUCCESS_WITH_INFO." 		     << " Check the function, please!" <<endl;	      GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);	    }    	  else if (retcode == SQL_ERROR)	    {	      ndbout << "Test 2:" << "Column number is less than zero." 		     << " The system reported SQL_ERROR." 		     << " The function is OK!" << endl; 	    }	  else	    ndbout << endl;	}      //    }           //  }   //*****************************  //** Define DELETE statement **  //*****************************      //  strcpy((char *) SQLStmt1, "DELETE FROM Customers");  strcpy((char *) SQLStmt1, "DELETE FROM Customers WHERE CustID = 568 AND Name = 'Hans  Peter'");  //***********************************  //** Prepare DELETE SQL statement  **  //***********************************  retcode = SQLPrepare(GD_hstmt, 		       SQLStmt1, 		       SQL_NTS);  ndbout << endl << "Preparing DELETE, retcode = SQLPrepare()= " 	 << retcode << endl;  //****************************************  //** Execute prepared DELETE statement **  //****************************************  //  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)   //    {      retcode = SQLExecute(GD_hstmt);     ndbout << "Executing DELETE, retcode = SQLExecute()= " 	    << retcode << endl;            //      if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)       //	{	  	  retcode = SQLFetch(GD_hstmt);	  ndbout << "Fetching after Executing DELETE, retcode = SQLExecute()= " 		 << retcode << endl;	  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 	    {	      	      //******************************************************	      //** Test3                                            **	      //** If the fetched rowset associated with            **	      //** Statement is empty, condition is raised: NO DATA **	      //** We can delete all rows in table Customers for    **	      //** this case                                        **	      //******************************************************	      	      retcode = SQLGetData(GD_hstmt, 				   1, 				   SQL_C_ULONG, 				   &CustID, 				   sizeof(CustID), 				   NULL);	      	      if (retcode == SQL_ERROR)		{		  ndbout << "Test 3:" << endl;		  ndbout << "The fetched rowset associated" 			 << "with Statementhandle is empty. The system" 			 << " reported SQL_ERROR. Check the function!" << endl;		  GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);        		}	      else if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)		{		  ndbout << "Test 3:" << endl;		  ndbout << "The fetched rowset associated" 			 << "with Statementhandle is empty. The system" 			 << " reported SUCCESS. Check the function!" << endl;		  GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);        		}	      else if (retcode == 100)		{		  ndbout << "Test 3:" << endl;		  ndbout << "The fetched rowset associated" 			 << "with Statementhandle is empty. The system" 			 << " reported SQL_NO_DATA. The function is OK!" << endl;		}	    } 	  else if (retcode == SQL_ERROR)	    { 	      ndbout << "Test 3 falied!" << endl;	      GetData_DisplayError(SQL_HANDLE_STMT, GD_hstmt);	    }	  else 	    ndbout << " " << endl;	  //	}      	  //    }  // *********************************  // ** Disconnect and Free Handles **  // *********************************    SQLDisconnect(GD_hdbc);  SQLFreeHandle(SQL_HANDLE_STMT, GD_hstmt);  SQLFreeHandle(SQL_HANDLE_DBC, GD_hdbc);  SQLFreeHandle(SQL_HANDLE_ENV, GD_henv);    return NDBT_OK;}void GetData_DisplayError(SQLSMALLINT GD_HandleType, SQLHSTMT GD_InputHandle){    SQLSMALLINT  i, MsgLen;  SQLRETURN    SQLSTATEs;  SQLCHAR      Sqlstate[5], Msg[GD_MESSAGE_LENGTH];  SQLINTEGER   NativeError;  i = 1;    ndbout << "-------------------------------------------------" << endl;  ndbout << "Error diagnostics:" << endl;    while ((SQLSTATEs = SQLGetDiagRec(GD_HandleType, 				    GD_InputHandle, 				    i, 				    Sqlstate, 				    &NativeError, 				    Msg, 				    sizeof(Msg), 				    &MsgLen)) 	 != SQL_NO_DATA)      {            ndbout << "the HandleType is:" << GD_HandleType << endl;      ndbout << "the InputHandle is :" << (long)GD_InputHandle << endl;      ndbout << "Phone = " << (char *)Msg << endl;      ndbout << "the output state is:" << (char *)Sqlstate << endl;             i ++;      break;    }  ndbout << "-------------------------------------------------" << endl;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?