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

数据库系统

开发平台:

Unix_Linux

  1. /*
  2.  * testlibpq1.cc
  3.  *  Test the C++ version of LIBPQ, the POSTGRES frontend library.
  4.  *
  5.  *  queries the template1 database for a list of database names 
  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.   PgDatabase 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.   // start a transaction block
  26.   if ( !data.ExecCommandOk("BEGIN") ) {
  27.     cerr << "BEGIN command failed" << endl;
  28.     exit(1);
  29.   }
  30.   // submit command to the backend
  31.   if ( !data.ExecCommandOk("DECLARE myportal CURSOR FOR select * from pg_database") ) {
  32.     cerr << "DECLARE CURSOR command failed" << endl;
  33.     exit(1);
  34.   }
  35.   // fetch instances from the pg_database, the system catalog of databases
  36.   if ( !data.ExecTuplesOk("FETCH ALL in myportal") ) {
  37.     cerr << "FETCH ALL command didn't return tuples properly" << endl;
  38.     exit(1);
  39.   }
  40.  
  41.   // first, print out the attribute names
  42.   int nFields = data.Fields();
  43.   for (int i=0; i < nFields; i++)
  44.       cout << setiosflags(ios::right) << setw(15) << data.FieldName(i);
  45.   cout << endl << endl;
  46.   // next, print out the instances
  47.   for (int i=0; i < data.Tuples(); i++) {
  48.        for (int j=0; j < nFields; j++)
  49.             cout << setiosflags(ios::right) << setw(15) << data.GetValue(i,j);
  50.        cout << endl;
  51.   }
  52.   // Close the portal
  53.   data.Exec("CLOSE myportal");
  54.   // End the transaction
  55.   data.Exec("END");
  56. }
  57.