Делаю по доке:
| Код | struct test { unsigned long long _ull; long long _longlong; double _double; };
namespace soci { template<> struct type_conversion<test> { typedef values base_type; static void from_base(values const & v, indicator /* ind */, test & p) { p._ull = v.get<unsigned long long>("_ull"); p._longlong = v.get<long long>("_longlong"); p._double = v.get<double>("_double"); } static void to_base(const test & p, values & v, indicator & ind) { v.set("_ull", p._ull); v.set("_longlong", p._longlong); v.set("_double", p._double); ind = i_ok; } }; }
int main(int , char **) { soci::session sql(soci::sqlite3, "dbname=test.db"); test _test = { 64ULL, 32LL, 2.0d }; soci::row r;
try { sql << "insert into test (_ull, _longlong, _double) values(:_ull, :_longlong, :_double)", soci::use(_test); sql << "select * from test", into(r); std::ostringstream doc; doc << "<row>" << std::endl; for(std::size_t i = 0; i != r.size(); ++i) { const soci::column_properties & props = r.get_properties(i);
doc << '<' << props.get_name() << '>';
switch(props.get_data_type()) { case soci::dt_string: doc << "std::string=" << r.get<std::string>(i); break; case soci::dt_double: doc << "double=" << r.get<double>(i); break; case soci::dt_integer: doc << "int=" << r.get<int>(i); break; case soci::dt_unsigned_long: doc << "unsigned long=" << r.get<unsigned long>(i); break; case soci::dt_long_long: doc << "long long=" << r.get<long long>(i); break; case soci::dt_unsigned_long_long: doc << "unsigned long long=" << r.get<unsigned long long>(i); break; case soci::dt_date: std::tm when = r.get<std::tm>(i); doc << "std::tm=" << asctime(&when); break; }
doc << "</" << props.get_name() << '>' << std::endl; } doc << "</row>";
std::cout << doc.str() << std::endl;
sql << "select * from test", soci::into(_test); std::cout << _test._ull << std::endl;
} catch (const std::exception& e) { std::cout << "[exception] " << e.what() << std::endl; } return 0; }
|
в базе - INTEGER, REAL при Загрузке из базы unsigned long long _ull; long long _longlong; определяются как int и бросается std::bad_cast
в чем проблема?
|