空山雪林通用模塊工作室

           

          JDBC操控Oracle XMLDB

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

          ?

          ?

          • 在數據庫中獲取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;
          		}
          	}?

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

          ?

          • 可以通過XmlType列的clob值,代碼如下:
          select x.sys_nc_rowinfo$.getclobval() as column_value	from xmltypeTable
          ?
          • 執行存錯過程(存儲過程中含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 人發表留言,猛擊->>這里<<-參與討論


          JavaEye推薦



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


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


          網站導航:
           

          導航

          友情鏈接

          最新評論

          主站蜘蛛池模板: 大连市| 正宁县| 扬州市| 长宁县| 滦南县| 长白| 邓州市| 新竹市| 利川市| 红桥区| 双鸭山市| 崇州市| 射洪县| 新源县| 乌审旗| 丰城市| 浦江县| 屏南县| 邓州市| 扶余县| 章丘市| 嵊州市| 阳高县| 芒康县| 青神县| 缙云县| 杭锦旗| 县级市| 天柱县| 亳州市| 淳化县| 政和县| 仲巴县| 嘉荫县| 南江县| 台湾省| 深水埗区| 东兰县| 金沙县| 甘泉县| 高邑县|