testlibpq3.cc
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*
  2.  * testlibpq3.cc
  3.  *  Test the C++ version of LIBPQ, the POSTGRES frontend library.
  4.  *
  5.  *  queries the template1 database for a list of database names using transaction block
  6.  *  and cursor interface.
  7.  *
  8.  */
  9. #include <iostream.h>
  10. #include <iomanip.h>
  11. #include <libpq++.H>
  12. int main()
  13. {
  14.   // Begin, by establishing a connection to the backend.
  15.   // When no parameters are given then the system will
  16.   // try to use reasonable defaults by looking up environment variables 
  17.   // or, failing that, using hardwired constants.
  18.   // Create a cursor database query object.
  19.   // All queries using cursor will be performed through this object.
  20.   const char* dbName = "dbname=template1";
  21.   PgCursor cData(dbName, "myportal");
  22.   // check to see that the backend connection was successfully made
  23.   if ( cData.ConnectionBad() ) {
  24.       cerr << "Connection to database '" << dbName << "' failed." << endl
  25.            << "Error returned: " << cData.ErrorMessage() << endl;
  26.       exit(1);
  27.   }
  28.   
  29.   // submit command to the backend
  30.   if ( !cData.Declare("select * from pg_database") ) {
  31.     cerr << "DECLARE CURSOR command failed" << endl;
  32.     exit(1);
  33.   }
  34.   // fetch instances from the pg_cDatabase, the system catalog of cDatabases
  35.   if ( !cData.Fetch() ) {
  36.     cerr << "FETCH ALL command didn't return tuples properly" << endl;
  37.     exit(1);
  38.   }
  39.  
  40.   // first, print out the attribute names
  41.   int nFields = cData.Fields();
  42.   for (int i=0; i < nFields; i++)
  43.       cout << setiosflags(ios::right) << setw(15) << cData.FieldName(i);
  44.   cout << endl << endl;
  45.   // next, print out the instances
  46.   for (int i=0; i < cData.Tuples(); i++) {
  47.        for (int j=0; j < nFields; j++)
  48.             cout << setiosflags(ios::right) << setw(15) << cData.GetValue(i,j);
  49.        cout << endl;
  50.   }
  51. }