在一次oracle操作程序调试过程中发现当每次执行到同一个select语句时程序就会抛出异常terminate called after throwing an instance of ‘otl_tmpl_exception<otl_exc, otl_conn, otl_cur>‘,并终止。为此我在网络上搜索该异常的处理方法:
网络上的解释及处理方式:
在linux下用c++连接mysql或oracle数据库时,若频繁调用otlstream构造函数,发生terminate called after throwing an instance of ‘otl_tmpl_exception<otl_exc, otl_conn, otl_cur>‘的问题,解决方法:
在调用otl_connect类的void rlogon(const char* connect_str, const int aauto_commit=0)函数时,将aauto_commit的值置为1。
例:
db.rlogon("DSN=my_db;UID=sa;PWD=tiger",1);
其中db为otl_connect类的对象。
注意:第二参数aauto_commit设置为1,表示数据库事务自动提交;设置为0,表示数据库事务非自动提交。
我遇到的情况跟该网上说明不一样,我是构造第二次otl_stream的时候就出现了该错误。
最后检查语句发现第二次构建的select语句的where子句中字段值的类型不匹配,即图中org_code类型不匹配,字段值类型本应是int类,而出错的select中的却给成了字符类型
改正后测试,通过。
涨知识:oracle的where子句类型不匹配也会抛出terminate called after throwing an instance of ‘otl_tmpl_exception<otl_exc, otl_conn, otl_cur>‘异常。