首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

反照实例

2013-08-01 
反射实例后来查了一下,原因是通过weblogic连接池取出的连接取出的blob对象是weblogic封装过的OracleThinBl

反射实例

后来查了一下,原因是通过weblogic连接池取出的连接取出的blob对象是weblogic封装过的OracleThinBlob,而不是oracle.sql.BLOB。然后又看了一下OracleThinBlob的方法与oracle.sql.BLOB类似,所以采用了下面的写法,避免异常(用到的是泛型的解决方法):

if("0".equals(type)){//上传图片
?????String update_fmp = "update web_prn_fmp set c_image_name=?,b_image=? where c_prn_fmp = '" + prnFmp+"'";
?????String query_fmp = "select b_image from web_prn_fmp where c_prn_fmp = ? FOR UPDATE" ;
?????pstmt = conn.prepareStatement(update_fmp);
?????
?????
?????pstmt.setString(1,imageName);
?????pstmt.setString(2,"0");//初始化blob数据,否则后续的调用会出现空指针异常.
?????pstmt.executeUpdate();
?????
?????pstmt.clearParameters();
?????
?????pstmt = conn.prepareStatement(query_fmp);
?????pstmt.setString(1,prnFmp);
?????rs? = pstmt.executeQuery();
?????if(rs.next())
?????{
//??????oracle.sql.BLOB b_image = (oracle.sql.BLOB) rs.getBlob("b_image");
//??????java.io.OutputStream writer = b_image.getBinaryOutputStream();//得到对应于数据库相应blob字段的输出流
//??????BufferedOutputStream out = new BufferedOutputStream(writer);
??????//tomcat和weblogic对blob字段进行了不同的包装,需使用如下的泛型方案代码 zengshaotao 2011-03-14
??????Object obj = rs.getBlob("b_image");
??????Class clazz = obj.getClass();
??????Method method = clazz.getMethod("getBinaryOutputStream", new Class[]{});
??????OutputStream os = (OutputStream)method.invoke(obj, new Object[]{});
??????BufferedOutputStream out = new BufferedOutputStream(os);
??????
??????out.write(image);
??????rs.close();
??????//writer.close();
??????out.close();
??????conn.commit();
??????conn.setAutoCommit(true);//恢复现场
?????}else{
??????throw new Exception("没有得到与给定的单证格式代码相应的记录!");
?????}
?????
????}

热点排行