JDBC 조작 Oracle XMLDB

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);
     
     
  • Xml Type 열의 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 추천
  • - 소프트웨어 인 재 는 언어 저 담 보 를 면제 하고 미국 에 가서 유급 으로 대학원 에 다 닙 니 다! -
  • Oracle 기술 대회 에 한시 적 으로 참가 신청
  • 좋은 웹페이지 즐겨찾기