- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++异常规格与程序core
日期:2010-1-25
作者:李建生
题记:追踪调试问题,上穷碧落下黄泉的感觉。
平台:IBM AIX、VAC(Visual Age C++)、Oracle 10g
关键词:异常、异常规格、core、OCI、非法日期、
摘要:我们的程序查询数据库时,如果遇到非法数据,则一定会core,对于正式上线运行程序,尤其是关键业务(如充值),会造成致命问题。
无论是我们的独立程序、还是CICS中件间程序,在查询oracle数据库时,若是遇到非法日期格式的数据,都会core掉,给我们的工作带来困扰,增加了开发维护工作量。
问题根源是华为的oralce数据库接口表中,对于日期类型的数据,偶尔会有一些日期字段是非法的,不合常规的如:22-24。从兴华为联合体刚割接BOSS时,遇到了大批这样的数据,开发浪费了大量的人力追踪、定位问题,最后统一提给华为修改数据了事。
但是到现在为止虽然没有大量的非法数据出现,但是偶尔还是会有非法数据,使我们的程序出错。如前段时间帐务空中充值程序问题,遇到了非法日期数据,程序一直Core,很短时间内产生了5万左右个文件,给维护带来的很大的工作量。并且还有可能导致充值不成功,引起客户投诉。
我们访问oralce数据库采用的是xdbc,而xdbc是采用oracle的OCI接口实现数据访问的。之前我们无法在测试数据库中生成非法日期数据,导致无法重现测试。后来,也就没有再跟进这个问题了。
今天有压力了(原因不说了),一劳永逸的解决掉这个问题(临时解决方法是不再访问数据库中的日期字段)。先说明一下我们访问数据库的代码结构:
数据访问类DAO(由工具根据建表语句自动生成)直接使用xdbc访问数据库。应用程序可以通过DAO或xdbc来访问数据库。
首先,模拟正式环境运行出错的场景,生成非法日期的数据。Xdbc无法完成这项任务,因为传递给它的一这理是日期对象,而合法的日期才能产生日期对象。再考虑Sqlplus,也不行,只能输入合法的日期。没办法,只有通过写小程序了。接着考虑oracle提供了OCI的接口,检查文档看OCI接口是否支持插入非法数据。
参看红色部分,通过OCI接口调用,OCI不会检查日期的范围,也即是不对合法性进行检查。证明可以通过OCI接口插入非法日期数据。以前不怎么了解OCI,google一把吧。好麻烦啊,现在只能中午上网。中午上网搜了一把,发现有一个参考示例,自己再接合xdbc通过OCE访问数据的方法。写出了插入非法数据的代码:
//将要插入的非法日期
char p_bvi[7]=22-33;
//生成访问OCI的环境
rc = OCIEnvCreate((OCIEnv **) p_env,OCI_DEFAULT,(dvoid *)0,
(dvoid * (*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *, dvoid *, size_t))0,
(void (*)(dvoid *, dvoid *)) 0,
(size_t) 0, (dvoid **) 0);
//登录数据库,使用201的测试机
rc = OCILogon(p_env, p_err, p_svc, jmzw, 4, jmzw, 4, boss15test, 10);
//创建库表create table test_a(a date);
//准备插入SQL语句
strcpy(mysql,insert into test_a values(:x));
rc = OCIStmtPrepare(p_sql, p_err, mysql,
(ub4) strlen(mysql), (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
//绑定非法数据字段
rc = OCIBindByName(p_sql, p_bnd, p_err, (text *) :x,
-1, (dvoid *) p_bvi, sizeof(p_bvi), SQLT_DAT, (dvoid *) 0,
(ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT);
rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4) 1, (ub4) 0,
//执行插入操作
(CONST OCISnapshot *) NULL, (OCISnapshot
您可能关注的文档
- 2012-2013学年NEO街舞社述职材料).ppt
- 2012湖北省高考随州广水一中预测卷答案).doc
- 2012年度共性目标管理工作总结).doc
- 2012年共青团长春市委工作安排).doc
- 2012全自动压载水系统word).doc
- 2012智能开关插座项目招商).ppt
- 2013春集中业务学习内容).doc
- 2013年公需科目考试题).doc
- 2013年小企业会计准则).doc
- 2013中考语文模拟试题四).doc
- 2024年05月黑龙江双鸭山饶河县事业单位面向社会公开引进高学历人才10人笔试上岸历年高频考点(难、易错点)附带答案详解.docx
- 2024年05月黑龙江鸡西市营商环境建设监督局招考聘用笔试上岸历年高频考点(难、易错点)附带答案详解.docx
- 2024年06月安徽马鞍山含山县选任人民陪审员120人笔试上岸历年高频考点(难、易错点)附带答案详解.docx
- 2024年2月上海交通大学医学院附属上海儿童医学中心招考聘用100人笔试上岸历年高频考点(难、易错点)附带答案详解.docx
- 2024年06月春季奥体中心公开招聘笔试上岸历年高频考点(难、易错点)附带答案详解.docx
- 2024年06月中国农业电影电视中心公开招聘应届毕业生拟录用人选笔试上岸历年高频考点(难、易错点)附带答案详解.docx
- 公路工程监理工程师经济系列(公路工程经济)模拟练习试卷16.pdf
- 公路工程监理工程师经济系列(公路工程经济)模拟练习试卷8.pdf
- 设备工程进度管理方法练习试卷1.pdf
- 环境影响评价师(环境影响评价技术方法)模拟试卷74.pdf
文档评论(0)