JDBC 조작 Oracle XMLDB
현재 XML 데이터 베 이 스 는 크게 유행 하고 있 습 니 다. 특히 데이터 교환 분야 에 서 는 XML 데이터 베이스 자체 의 특징 으로 크게 솜 씨 를 발휘 할 수 있 습 니 다. 그러면 JDBC 는 어떻게 XMLDB 를 조작 합 니까? 간단 한 예 를 들 어 벽돌 을 던 져 옥 을 끌 어 올 립 시다.
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);
select x.sys_nc_rowinfo$.getclobval() as column_value from xmltypeTable
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 추천
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.