603206f7

Немного более сложный пример


Этот пример почти подобен предыдущему, однако он использует исключительные ситуации и автоматическое свойство преобразования ColData. Файл с ним назван complic1.cc. #include <iostream> #include <iomanip> #include <sqlplus.hh>

int main() { try { // its in one big try block Connection con(use_exceptions); con.connect("mysql_cpp_data"); // Here we broke making the connection into two calls. // The first one creates the Connection object with the // use exceptions option turned on and the second one // makes the connection

Query query = con.query(); query << "select * from stock"; Result res = query.store(); cout << "Query: " <<query.preview() << endl; cout << "Records Found: "<< res.size() << endl <<endl; Row row; cout.setf(ios::left); cout << setw(17) << "Item" << setw(4) <<"Num" << setw(7) <<"Weight" << setw(7) <<"Price" << "Date" <<endl << endl; Result::iterator i; cout.precision(3); for (i = res.begin(); i != res.end(); i++) { row = *i; cout << setw(17) <<row["item"] << setw(4) <<row[1] << setw(7) << (double)row[2] << setw(7) <<(double)row[3]; Date date = row["sdate"]; // The ColData is implicitly converted to a date here. cout.setf(ios::right); cout.fill('0'); cout << setw(2) <<date.month << "-" << setw(2) << date.day << endl; cout.fill(' '); cout.unsetf(ios::right); } return 0; } catch (BadQuery er) { // handle any connection or // query errors that may come up cerr << "Error: " <<er.error << endl; return -1; } catch (BadConversion er) { // handle bad conversions cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" << er.type_name <<"\"." <<endl; return -1; } }

Все должно быть довольно очевидно. Приведу лишь несколько примечаний относительно исключительных ситуаций:

    Когда флажок use_exceptions установлен для родительского объекта, он также установлен для всех потомков, созданных после того, как флажок был установлен. Например, когда флажок use_exceptions установлен для объекта con, он также установлено и для объекта query. Пожалуйста, обратите внимание, что флажок use_exceptions не компонуется, а копируется. Это означает, что, когда Вы изменяете флажок use_exceptions, это воздействует только на новые объекты, но не на старые.
  1. ColData будет всегда создавать исключительную ситуацию, когда сталкивается с плохим преобразованием. Плохое преобразование определено как преобразование в котором: a) Не все символы из строки читаются, и b) Символы после числа не точки (.), нули (0) или пробелы. Таким образом, когда ``1.25'' преобразован в int, исключительная ситуация будет создана, а вот при обработке ``1.00'' в int все будет в порядке, поскольку символы нуль и точка.



Содержание раздела