fieldinf1.cpp
上传用户:clovervx
上传日期:2010-03-30
资源大小:787k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <sqlplus.hh>
  5. int main() {
  6.   try { // its in one big try block
  7.     Connection con(use_exceptions);
  8.     con.connect("mysql_cpp_data");
  9.     Query query = con.query();
  10.     query << "select * from stock";
  11.     Result res = query.store();
  12.     
  13.     cout << "Query: " << query.preview() << endl;
  14.     cout << "Records Found: " << res.size() << endl << endl;
  15.     cout << "Query Info:n";
  16.     cout.setf(ios::left);
  17.     for (unsigned int i = 0; i < res.names().size(); i++) {
  18.       cout << setw(2)  << i
  19.    << setw(15) << res.names(i).c_str()
  20. // this is the name of the field
  21.    << setw(15) << res.types(i).sql_name()
  22. // this is the SQL identifier name
  23. // Result::types(unsigned int) returns a mysql_type_info which in many
  24. // ways is like type_info except that it has additional sql type
  25. // information in it. (with one of the methods being sql_name())
  26.    << setw(20) << res.types(i).name()
  27. // this is the C++ identifier name which most closely resembles
  28. // the sql name (its is implementation defined and often not very readable)
  29.    << endl;
  30.     }
  31.     cout << endl;
  32.     
  33.     if (res.types(0) == typeid(string))
  34.       cout << "Field 'item' is of an sql type which most closely resembles an"
  35.    << "the c++ string typen";
  36.     // this is demonstrating how a mysql_type_info can be compared with a c++
  37.     // type_info.
  38.     if (res.types(1) == typeid(longlong))
  39.       cout << "Field 'num' is of an sql type which most closely resembles an"
  40.    << "the c++ long long int typen";
  41.     else if (res.types(1).base_type() == typeid(longlong))
  42.       cout << "Field 'num' base type is of an sql type which most closely n"
  43.    << "resembles a the c++ long long int typen";
  44.     // However you have to be careful as if it can be null the actual type is 
  45.     // Null<TYPE> not TYPE.  So you should always use the base_type method
  46.     // to get at the underlying type.  If the type is not null than this base
  47.     // type would be the same as its type.
  48.     
  49.     return 0;
  50.   } catch (BadQuery er) {
  51.     cerr << "Error: " << er.error << endl;
  52.     return -1;
  53.   } catch (BadConversion er) { // handle bad conversions
  54.     cerr << "Error: Tried to convert "" << er.data << "" to a "" 
  55.  << er.type_name << ""." << endl;
  56.     return -1;
  57.   }
  58. }