soci是一个用C++封装的数据库访问库,soci是“Simple Oracle Call Interface”的缩写(现在支持的不只有oracle数据库了),在github(https://github.com/SOCI/soci)上有开源代码
有一天在使用过程中发现程序抛出了bad_cast的异常,一般情况下出现这种错误是因为程序指定的数据类型与数据库的存储类型不一致导致的,当时执行的sql语句是:select max(fvalue),avg(fvalue),min(fvalue) from table1 group by type,因为fvalue在数据库的类型为number(16,6),在程序中获取number(16,6)类型的数据时指定泛型为double类型,通过调试发现,soci中max(fvalue)的返回结果为居然是个整数,坑爹啊!!!说好的的小数位去哪了!!!
已经给作者提提交了问题,还没得到回应,先暂时使用to_char函数,把组函数的结果转换成字符串类型返回,sql为select to_char(max(fvalue)),to_char(avg(fvalue)), to_char(min(fvalue)) from table1 group by type函数,程序中再用atof转换成double类型使用。