第一篇Blog!!记录关于Oraclehelper的问题。。。

阅读更多
今天费九牛二虎之力才发现一个隐藏的很深的bug。
给我一个教训:简单是最好的。

详细问题如下:

数据访问的架构是这样的:
servlet---------->sessionBean---->DAO--------------->DB
如果需要访问BLOB或者CLOB字段就有加一层帮助类如下
servlet------->sessionBean---->DAO----->OracleLobHelper---->DB
本来上面的结构访问还是比较正常的,但最近发现有些数据查不出来,其中BUG定位的血泪史就不累述了,最后发现是OracleLobHelper出现问题。

简单说,OracleLobHelper 传入的参数为 表名,哈西结构的查询参数,查询的BLOB字段名。三个。
使用hash给preparestatment参数赋值的代码如下。

private void setParameters(PreparedStatement stmt, Map keys);
		throws SQLException {
		int index = 1;
		for (Iterator i = keys.keySet();.iterator();; i.hasNext();;); {
			String keyColumn = (String); i.next();;
			stmt.setObject(index, keys.get(keyColumn););;			
			index++;
		}
	}


问题出现了:就是,当数据表中的字段(查询条件字段)“FORM_VERSION”是“NUMBER(5,1)”而从servlet传递的类型是float时就查不出数据。

以上设计看起来很精巧其实把简单问题复杂话,平白多出一层自然出错几率要多。而且调用起来一点都不方便,类内部耦合性特大,特复杂。
以后要避免类似问题,另外,该问题到底是怎么回事还是不清楚。

这个类不是我写的,嘿嘿。。。。

你可能感兴趣的:(Blog,Servlet,DAO,数据结构)