空山雪林通用模塊工作室

           

          JDBC操控Oracle XMLDB

          現(xiàn)在XML數(shù)據(jù)庫大行其道,特別在數(shù)據(jù)交換領域,由于XML數(shù)據(jù)庫本身的特點,可以大顯身手,那么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 徐靈 閱讀(297) 評論(0)  編輯  收藏


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


          網(wǎng)站導航:
           

          導航

          友情鏈接

          最新評論

          主站蜘蛛池模板: 隆安县| 江北区| 广东省| 墨江| 蓝山县| 鄂伦春自治旗| 东光县| 洛宁县| 砚山县| 泰宁县| 蕲春县| 临沧市| 洛南县| 临夏县| 聂荣县| 长宁县| 梓潼县| 永川市| 将乐县| 额尔古纳市| 五莲县| 杭锦后旗| 南投市| 六枝特区| 宝应县| 山阳县| 广宁县| 双城市| 钟山县| 栾城县| 兴山县| 法库县| 吴川市| 迭部县| 都昌县| 通许县| 镇远县| 尼木县| 新源县| 阜城县| 望都县|