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

数据库系统

开发平台:

Unix_Linux

  1. /*
  2.  * testlibpq2.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.  *
  7.  */
  8. #include <iostream.h>
  9. #include <iomanip.h>
  10. #include <libpq++.H>
  11. int main()
  12. {
  13.   // Begin, by establishing a connection to the backend.
  14.   // When no parameters are given then the system will
  15.   // try to use reasonable defaults by looking up environment variables 
  16.   // or, failing that, using hardwired constants
  17.   const char* dbName = "dbname=template1";
  18.   PgTransaction data(dbName);
  19.   // check to see that the backend connection was successfully made
  20.   if ( data.ConnectionBad() ) {
  21.       cerr << "Connection to database '" << dbName << "' failed." << endl
  22.            << "Error returned: " << data.ErrorMessage() << endl;
  23.       exit(1);
  24.   }
  25.   // submit command to the backend
  26.   if ( !data.ExecCommandOk("DECLARE myportal CURSOR FOR select * from pg_database") ) {
  27.     cerr << "DECLARE CURSOR command failed" << endl;
  28.     exit(1);
  29.   }
  30.   // fetch instances from the pg_database, the system catalog of databases
  31.   if ( !data.ExecTuplesOk("FETCH ALL in myportal") ) {
  32.     cerr << "FETCH ALL command didn't return tuples properly" << endl;
  33.     exit(1);
  34.   }
  35.  
  36.   // first, print out the attribute names
  37.   int nFields = data.Fields();
  38.   for (int i=0; i < nFields; i++)
  39.       cout << setiosflags(ios::right) << setw(15) << data.FieldName(i);
  40.   cout << endl << endl;
  41.   // next, print out the instances
  42.   for (int i=0; i < data.Tuples(); i++) {
  43.        for (int j=0; j < nFields; j++)
  44.             cout << setiosflags(ios::right) << setw(15) << data.GetValue(i,j);
  45.        cout << endl;
  46.   }
  47.   // close the portal
  48.   data.Exec("CLOSE myportal");
  49. }