SQLTablesTest.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13.  /**
  14.  * @file SQLTablesTest.cpp
  15.  */
  16. #include <common.hpp>
  17. using namespace std;
  18. #define Tables_NAME_LEN 12
  19. #define Tables_PHONE_LEN 12
  20. #define Tables_ADDRESS_LEN 12
  21. #define Tables_SQL_MAXIMUM_MESSAGE_LENGTH 200
  22. SQLHDBC     Tables_hdbc;
  23. SQLHSTMT    Tables_hstmt;
  24. SQLHENV     Tables_henv;
  25. SQLHDESC    Tables_hdesc;
  26. void Tables_DisplayError(SQLSMALLINT Tables_HandleType, 
  27.   SQLHSTMT Tables_InputHandle);
  28. /** 
  29.  * Test to retrieve a list of table names stored in aspecified
  30.  * data source's system
  31.  *
  32.  * -# Normal case test: print out the table name in the data result set
  33.  * @return Zero, if test succeeded
  34.  */
  35. int SQLTablesTest()
  36. {
  37.   SQLRETURN   Tables_retcode;
  38.   SQLCHAR     Tables_Name[Tables_NAME_LEN], Tables_Phone[Tables_PHONE_LEN];
  39.   SQLCHAR     Tables_Address[Tables_ADDRESS_LEN];
  40.   SQLINTEGER  Tables_CustID;
  41.   ndbout << endl << "Start SQLTables Testing" << endl;
  42.   //*******************************************************************
  43.   //** hstmt 
  44.   //** Execute a statement to retrieve rows from the Customers table **
  45.   //** We can create the table and insert rows into Customers        **
  46.   //*******************************************************************
  47.   //************************************
  48.   //** Allocate An Environment Handle **
  49.   //************************************
  50.   Tables_retcode = SQLAllocHandle(SQL_HANDLE_ENV, 
  51.             SQL_NULL_HANDLE, 
  52.    &Tables_henv);
  53.   
  54. if (Tables_retcode == SQL_SUCCESS || Tables_retcode == SQL_SUCCESS_WITH_INFO)
  55.     ndbout << "Allocated an environment Handle!" << endl;
  56.   
  57.   //*********************************************
  58.   //** Set the ODBC application Version to 3.x **
  59.   //*********************************************
  60.   Tables_retcode = SQLSetEnvAttr(Tables_henv, 
  61.           SQL_ATTR_ODBC_VERSION, 
  62.           (SQLPOINTER) SQL_OV_ODBC3, 
  63.           SQL_IS_UINTEGER);
  64.   
  65. if (Tables_retcode == SQL_SUCCESS || Tables_retcode == SQL_SUCCESS_WITH_INFO)
  66.     ndbout << "Set the ODBC application Version to 3.x!" << endl;
  67.   //**********************************
  68.   //** Allocate A Connection Handle **
  69.   //**********************************
  70.   Tables_retcode = SQLAllocHandle(SQL_HANDLE_DBC, 
  71.    Tables_henv, 
  72.    &Tables_hdbc);
  73. if (Tables_retcode == SQL_SUCCESS || Tables_retcode == SQL_SUCCESS_WITH_INFO)
  74.     ndbout << "Allocated a connection Handle!" << endl;
  75.   
  76.   // *******************
  77.   // ** Connect to DB **
  78.   // *******************
  79.   Tables_retcode = SQLConnect(Tables_hdbc, 
  80.        (SQLCHAR *) connectString(), 
  81.        SQL_NTS, 
  82.        (SQLCHAR *) "", 
  83.        SQL_NTS, 
  84.        (SQLCHAR *) "", 
  85.        SQL_NTS);
  86.   
  87. if (Tables_retcode == SQL_SUCCESS || Tables_retcode == SQL_SUCCESS_WITH_INFO)
  88.     ndbout << "Connected to DB : OK!" << endl;
  89.   else 
  90.     {  
  91.       ndbout << "Failure to Connect DB!" << endl;
  92.       return NDBT_FAILED;
  93.     }
  94.   //*******************************
  95.   //** Allocate statement handle **
  96.   //*******************************
  97.   
  98.   Tables_retcode = SQLAllocHandle(SQL_HANDLE_STMT, 
  99.   Tables_hdbc, 
  100.   &Tables_hstmt); 
  101. if (Tables_retcode == SQL_SUCCESS || Tables_retcode == SQL_SUCCESS_WITH_INFO) 
  102.     ndbout << "Allocated a statement handle!" << endl;
  103.   
  104.   //**************************************************************
  105.   //** Retrieve information about the tables in the data source **
  106.   //**************************************************************
  107.  Tables_retcode = SQLTables(Tables_hstmt,
  108.     NULL,
  109.     0,
  110.     NULL,
  111.     0,
  112.     (SQLCHAR *)"%",
  113.     128,
  114.     (SQLCHAR *)"TABLES", 
  115.     128);
  116.  ndbout <<"Tables_retcode = SQLTables() =" << Tables_retcode; 
  117.  if (Tables_retcode == SQL_ERROR)
  118.    Tables_DisplayError(SQL_HANDLE_STMT, Tables_hstmt);
  119.   //*******************************************
  120.   //** Bind columns 3 in the result data set **
  121.   //*******************************************
  122.   Tables_retcode = SQLBindCol(Tables_hstmt, 
  123.       3,
  124.       SQL_C_CHAR, 
  125.       &Tables_Name, 
  126.       Tables_NAME_LEN, 
  127.       NULL);
  128.  ndbout <<"Tables_retcode = SQLBindCol() =" << Tables_retcode;
  129.   //**********************************************
  130.   //* Fetch and print out data in the result On **
  131.   //* an error, display a message and exit      **
  132.   //**********************************************
  133.  
  134.   Tables_retcode = SQLFetch(Tables_hstmt);
  135.  ndbout <<"Tables_retcode = SQLFetch() =" << Tables_retcode;
  136.   ndbout << endl << "Tables_retcode = SQLFetch(Tables_hstmt) = " 
  137.  << Tables_retcode << endl;
  138.  if (Tables_retcode == SQL_ERROR)
  139.     { 
  140.       Tables_DisplayError(SQL_HANDLE_STMT, Tables_hstmt);
  141.       return NDBT_FAILED;
  142.     }
  143.   else if (Tables_retcode == SQL_SUCCESS_WITH_INFO) 
  144.     {
  145.       ndbout << "Table Name = " << (char *)Tables_Name << endl;
  146.       Tables_DisplayError(SQL_HANDLE_STMT, Tables_hstmt);
  147.     }
  148.  else if (Tables_retcode == SQL_NO_DATA)
  149.      Tables_DisplayError(SQL_HANDLE_STMT, Tables_hstmt);
  150.  else
  151.    {
  152.      ndbout << "TableName = " << (char *)Tables_Name << endl;  
  153.      Tables_DisplayError(SQL_HANDLE_STMT, Tables_hstmt);
  154.    }
  155.   // *********************************
  156.   // ** Disconnect and Free Handles **
  157.   // *********************************  
  158.   SQLDisconnect(Tables_hdbc);
  159.   SQLFreeHandle(SQL_HANDLE_STMT, Tables_hstmt);
  160.   SQLFreeHandle(SQL_HANDLE_DBC, Tables_hdbc);
  161.   SQLFreeHandle(SQL_HANDLE_ENV, Tables_henv);
  162.  return NDBT_OK;
  163. }
  164. void Tables_DisplayError(SQLSMALLINT Tables_HandleType, 
  165.  SQLHSTMT Tables_InputHandle)
  166. {
  167.   SQLINTEGER  NativeError;
  168.   SQLSMALLINT Tables_i = 1;
  169.   SQLRETURN Tables__SQLSTATEs;
  170.   SQLCHAR Tables_Sqlstate[5];
  171.   SQLCHAR Tables_Msg[Tables_SQL_MAXIMUM_MESSAGE_LENGTH];
  172.   SQLSMALLINT Tables_MsgLen;
  173.   
  174.   ndbout << "-------------------------------------------------" << endl;
  175.   ndbout << "Error diagnostics:" << endl;
  176.   
  177.   while ((Tables__SQLSTATEs = SQLGetDiagRec(Tables_HandleType, 
  178.      Tables_InputHandle, 
  179.      Tables_i, 
  180.      Tables_Sqlstate, 
  181.      &NativeError, 
  182.      Tables_Msg, 
  183.      sizeof(Tables_Msg), 
  184.      &Tables_MsgLen)
  185.   ) != SQL_NO_DATA)
  186.     {
  187.       ndbout << "the HandleType is:" << Tables_HandleType << endl;
  188.       ndbout << "the InputHandle is :" << (long)Tables_InputHandle << endl;
  189.       ndbout << "the Tables_Msg is: " << (char *) Tables_Msg << endl;
  190.       ndbout << "the output state is:" << (char *)Tables_Sqlstate << endl; 
  191.       Tables_i ++;
  192.       break;
  193.     }
  194.   ndbout << "-------------------------------------------------" << endl;
  195. }