<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空山雪林通用模塊工作室

     

    JDBC操控Oracle XMLDB

    現(xiàn)在XML數(shù)據(jù)庫大行其道,特別在數(shù)據(jù)交換領(lǐng)域,由于XML數(shù)據(jù)庫本身的特點(diǎn),可以大顯身手,那么JDBC如何來操作XMLDB呢,我們舉幾個簡單的例子拋磚引玉一下吧

    ?

    ?

    • 在數(shù)據(jù)庫中獲取XMLType類型的列值,比如存儲過程返回XmlType等,代碼如下:
    public static String getOracleXMlType2String(Object obj){
    		try{
    			if(obj instanceof OPAQUE){
    				StringBuffer sb = new StringBuffer();
    				OPAQUE op =(OPAQUE)obj; 
    				if(op!=null){
    					XMLType poxml = XMLType.createXML(op);
    					if(poxml!=null){
    						sb.append(poxml.getStringVal());
    					}
    				}
    				return sb.toString();
    			}
    			return obj.toString();
    		}catch(Exception ex){
    			return null;
    		}
    	}?

    執(zhí)行存儲過程代碼:
     Object[] res = DbUtils.ExecuteSP("{call 存儲過程名(?,?)}", new Object[]{
    		new SpParameter(Types.VARCHAR, "IN", "in參數(shù)", "in參數(shù)值")
    		,new SpParameter(OracleTypes.OPAQUE,"OUT","x",null)}, conn);
    ?

    ?

    • 可以通過XmlType列的clob值,代碼如下:
    select x.sys_nc_rowinfo$.getclobval() as column_value	from xmltypeTable
    ?
    • 執(zhí)行存錯過程(存儲過程中含XmlTYPE返回值)
    	public static final Object[] ExecuteSP(String stmt, Object[] inparams,
    			Connection connection) {
    		int i = 1;
    		CallableStatement st = null;
    		SpParameter sp = null;
    		SpParameter outp = null;
    		int DataType;
    		String Direction;
    		String Name;
    		String DataValue;
    
    		try {
    			st = connection.prepareCall(stmt);
    
    			int oupcount = 0;
    
    			for (i = 0; i < inparams.length; i++) {
    				if (inparams[i] instanceof SpParameter) {
    					sp = (SpParameter) inparams[i];
    
    					if (sp.GetDirection().toUpperCase().equals("IN")) {
    						switch (sp.GetDataType()) {
    						case Types.FLOAT:
    						case Types.INTEGER:
    							st
    									.setLong(i + 1, Long.parseLong(sp
    											.GetDataValue()));
    							break;
    
    						case Types.DATE:
    							st.setDate(i + 1, java.sql.Date.valueOf(sp
    									.GetDataValue()));
    							break;
    						case Types.SQLXML:
    							st.setSQLXML(i + 1, null);
    							break;
    						default:
    							st.setString(i + 1, sp.GetDataValue());
    							break;
    						}
    					} else {
    						if(sp.getDataType() == OracleTypes.OPAQUE){
    							st.registerOutParameter (i+1, OracleTypes.OPAQUE,"SYS.XMLTYPE");
    						}else
    							st.registerOutParameter(i + 1, sp.GetDataType());
    						oupcount = oupcount + 1;
    					}
    				} else
    					st.setObject(i + 1, inparams[i]);
    			}
    
    			st.execute();
    			i = 1;
    
    			if (oupcount > 0) {
    				Object[] outps = new Object[oupcount];
    				int j = 0;
    				for (i = 0; i < inparams.length; i++) {
    					if (!(inparams[i] instanceof SpParameter))
    						continue;
    
    					sp = (SpParameter) inparams[i];
    
    					if (!sp.GetDirection().toUpperCase().equals("IN")) {
    						DataType = sp.GetDataType();
    						Direction = sp.GetDirection();
    						Name = sp.GetName();
    
    						switch (DataType) {
    						case Types.FLOAT:
    							DataValue = String.valueOf(st.getLong(i + 1));
    							break;
    
    						case Types.INTEGER:
    							DataValue = String.valueOf(st.getInt(i + 1));
    							break;
    
    						case Types.DATE:
    							DataValue = st.getDate(i + 1).toString();
    							break;
    
    						case OracleTypes.OPAQUE:
    							DataValue = getOracleXMlType2String(st.getObject(i+1));
    							break;
    						default:
    							DataValue = st.getString(i + 1);
    							break;
    						}
    
    						sp.setDataValue(DataValue);
    						outps[j++] = DataValue;
    
    						// res.addElement(new SpParameter(DataType, Direction,
    						// Name,
    						// DataValue));
    					}
    				}
    
    				return outps;
    			} else {
    				return null;
    			}
    		} catch (SQLException ex) {
    			
    		} finally {
    			if (st != null) {
    				try {
    					st.close();
    				} catch (Exception ex) {
    					log.error(ex);
    				}
    
    			}
    		}
    	}
    ?


    已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


    JavaEye推薦



    posted on 2010-09-06 13:21 徐靈 閱讀(296) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    友情鏈接

    最新評論

    主站蜘蛛池模板: 两个人看的www高清免费观看| 四虎国产精品免费久久| 亚洲Aⅴ无码专区在线观看q| 日本人的色道免费网站| 国产成人综合久久精品亚洲| 久久亚洲中文字幕精品一区四| 日本视频免费高清一本18| 亚洲sss综合天堂久久久| 免费A级毛片无码A| 99视频免费观看| 日韩成人精品日本亚洲| 亚洲Aⅴ无码专区在线观看q| 国产色爽免费视频| 久久午夜夜伦鲁鲁片无码免费| 亚洲Av无码国产一区二区| 亚洲AV电影院在线观看| 免费国产美女爽到喷出水来视频| 久久精品免费一区二区三区| 亚洲妇女无套内射精| 亚洲国产精品无码久久一线| 最好免费观看韩国+日本| 久久午夜夜伦鲁鲁片免费无码| 美女黄频a美女大全免费皮| 亚洲精品福利网站| 国产亚洲精久久久久久无码77777| 久久久久久国产a免费观看黄色大片| 午夜不卡AV免费| 亚洲AV无码一区二区三区牛牛| 亚洲成A人片在线观看WWW| 国产一级大片免费看| 91频在线观看免费大全| 波多野结衣免费一区视频| 老司机精品视频免费| 亚洲伊人久久大香线蕉AV| 亚洲专区先锋影音| 亚洲午夜未满十八勿入网站2| 四虎成人免费网址在线| 无码国产精品久久一区免费 | 亚洲综合一区二区三区四区五区| 亚洲精品中文字幕无码蜜桃| 国产性生交xxxxx免费|