custom1.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:2k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <sqlplus.hh>
  5. #include <custom.hh>
  6. sql_create_5 (stock, // struct name, 
  7.       1, 5, // I'll explain these latter
  8.       string, item, // type, id
  9.       int, num,
  10.       double, weight,
  11.       double, price,
  12.       Date, sdate)
  13. // this is calling a very complex macro which will create a custom
  14. // struct "stock" which has the variables:
  15. //   string item
  16. //    int num
  17. //    ...
  18. //    Date sdate
  19. // defined as well methods to help populate the class from a mysql row
  20. // among other things that I'll get too in a latter example
  21. int main () {
  22.   try { // its in one big try block
  23.     Connection con (use_exceptions);
  24.     con.connect ("mysql_cpp_data");
  25.     Query query = con.query ();
  26.     query << "select * from stock";
  27.     vector < stock > res;
  28.     query.storein (res);
  29.     // this is storing the results into a vector of the custom struct
  30.     // "stock" which was created my the macro above.
  31.     cout.setf (ios::left);
  32.     cout << setw (17) << "Item"
  33.  << setw (4) << "Num"
  34.  << setw (7) << "Weight"
  35.  << setw (7) << "Price"
  36.  << "Date" << endl
  37.  << endl;
  38.     // Now we we iterate through the vector using an iterator and
  39.     // produce output similar to that using Row
  40.     // Notice how we call the actual variables in i and not an index
  41.     // offset.  This is because the macro at the begging of the file
  42.     // set up an *actual* struct of type stock which contains the 
  43.     // variables item, num, weight, price, and data.
  44.     cout.precision(3);
  45.     vector <stock>::iterator i;
  46.     for (i = res.begin (); i != res.end (); i++) {
  47.       cout << setw (17) << i->item.c_str ()
  48. // unfortunally the gnu string class does not respond to format
  49. // modifers so I have to convert it to a conat char *.
  50.    << setw (4) << i->num
  51.    << setw (7) << i->weight
  52.    << setw (7) << i->price
  53.    << i->sdate
  54.    << endl;
  55.     }
  56.     return 0;
  57.     
  58.   } catch (BadQuery er){ // handle any connection 
  59.                          // or query errors that may come up
  60.     cerr << "Error: " << er.error << endl;
  61.     return -1;
  62.   } catch (BadConversion er) {
  63.     // we still need to cache bad conversions incase something goes 
  64.     // wrong when the data is converted into stock
  65.     cerr << "Error: Tried to convert "" << er.data << "" to a ""
  66.  << er.type_name << ""." << endl;
  67.     return -1;
  68.   }
  69. }