检测Java代码: 破坏者数据错误情势[Java编程]
本文“检测Java代码: 破坏者数据错误情势[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
百万分之一
作为一个勤奋的开辟人员,您已经为几个需求更好地拜候复杂的大量数据存储的客户安装了一个利用程序,它编写杰出,并且经过了充分测试.
对每个客户,现场测试阶段都通畅无阻地通过了.您在去银行的路上,心里极少考虑这六个月来的软件检查,这时您的传呼机响了起来.您的一个客户在利用您的软件运行一个报表时,系统崩溃了.
您赶到失事地址,运行了一个随机测试.工作杰出.您运行另一个.没呈现问题.您又运行了数百个测试.还是没有问题.您又查抄了持续六个月运行这个利用程序的别的客户.没有投诉.
您反复运行那个惹起问题的报表.崩溃!怎么回事?
破坏者数据错误情势
很多程序需求频繁拜候和处理内部储存的数据来履行各种复杂的任务.这种数据可以从内存中的大型构造、数据库或网络上检索得到.
这类程序非常简单蒙受破坏的内部数据惹起的崩溃.我称这种错误情势为破坏者数据情势,是因为这种数据可以无期限地存在于系统中(很象暗斗中的暗藏特工一样),不引发任何问题,直到拜候一段特定的数据时,破坏的数据才象炸弹一样爆炸.
语法缘由
假定我们有一个 JDBC 利用程序,它存储了一个名为 Mapping 的数据库表,该表将 String 的名称映射到一系列元素的调集.(请参阅 参考资料,以获得关于 JDBC API 的更多信息.)每个调集合的每个元素都引用另一个表中的一个关键字(该表名为 Properties,包含这些元素的差别已知属性).
这样说吧,Mapping 和 Properties 表最初都是从一个文本文件中读取的,这个文本文件由外部源( 外部意为不是内部产生的肆意数据源)发展而来,而在外部源中,每行都以一个名称开首,背面随着对应调集的表达,以下所示:
清单 1. 样本,外部源文本文件
In the Mapping file:
apples {macintosh, gala, golden-delicious}
trees {elm, beech, maple, pine, birch}
rocks {quartz, limestone, marble, diamond}
...
In the Properties file:
macintosh {color: red, taste: sour}
gala {color: red, taste: sweet}
diamond {color: clear, rigidity: hard, value: high}
...
可以对 Mapping 和 Properties 表条目举行语法解析并将其传送到一个办法中,此办法会把这些条目插入到一个数据库中.但这种办法存在潜在的缺陷.比方,假定我们已经编写了一个处理 JDBC 兼容数据库的类.遵循 JDBC API,我们可以定义一个 PreparedStatement 对象并利用它把信息传送到数据库中,以下所示:
清单 2. 利用 StreamTokenizer 插入域和区域字符串
...
PreparedStatement insertionStmt =
con.prepareStatement("INSERT INTO MAPPING VALUES(?,?)");
...
public void insertEntry(String domain, String range)
throws SQLException {
insertionStatement.setString(1, domain);
insertionStatement.setString(2, range);
insertionStatement.executeUpdate();
}
以这种方法插入两个 String 符合与否取决于从文本文件中获得 String 的方法.比方,假定一个简单的正则表达式匹配工具被用来将每一行拆分成两个 String :
一个 String 包含第一个 String 之前的全部字符.
一个 String 包含第一个 String 之后的全部字符.
以上是“检测Java代码: 破坏者数据错误情势[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |