by 구루비 GETSTRINGVAL() GETCLOBVAL() XMLTYPE CREATEXML [2005.11.06]
JDBC를 이용한 XMLType의 insert,update,select 예제입니다. 아래의 테이블과 시퀀스를 생성 한 후 테스트 해주세요.. ^^
-- scott/tiger에 테스트 테이블 생성 CREATE TABLE po_xml_tab( poid number, poDoc SYS.XMLTYPE ); -- poid를 부여 할 시퀀스 생성 CREATE SEQUENCE po_xml_tab_seq INCREMENT BY 1 START WITH 1; -- ojdbc14.jar파일을 classpath에 추가합니다.
import java.sql.DriverManager; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import oracle.xdb.XMLType; import oracle.jdbc.driver.OraclePreparedStatement; import oracle.jdbc.driver.OracleResultSet; public class XMLTypeTest { /** * 일반적인 XMLType insert 예제입니다. * @param conn * @return insert된 record count */ private int insertXML(Connection conn) { int result = -1; StringBuffer sql = new StringBuffer(); StringBuffer xmlData = new StringBuffer(); OraclePreparedStatement ostmt = null; try{ //저장될 샘플 XML Data xmlData.append("<PO>"); xmlData.append(" <PONO>2</PONO>"); xmlData.append(" <PNAME>Po_2</PNAME>"); xmlData.append(" <CUSTNAME>Scott</CUSTNAME>"); xmlData.append(" <SHIPADDR>"); xmlData.append(" <STREET>1033, Main Street</STREET>"); xmlData.append(" <CITY>Sunnyvalue</CITY>"); xmlData.append(" <STATE>CA</STATE>"); xmlData.append(" </SHIPADDR>"); xmlData.append("</PO>"); // INSERT 문장 sql.append(" INSERT INTO po_xml_tab (poid, poDoc) "); sql.append(" VALUES (po_xml_tab_seq.NEXTVAL, sys.XMLType.createXML(?)) "); ostmt = (OraclePreparedStatement)conn.prepareStatement(sql.toString()); ostmt.setString(1, xmlData.toString()); result = ostmt.executeUpdate(); } catch(SQLException sqlexp){ sqlexp.printStackTrace(); } catch(Exception exp){ exp.printStackTrace(); }finally { try { if (ostmt != null) ostmt.close(); } catch (SQLException se) { } } return result; } /** * 일반적인 XMLType select 예제 * * @param conn * @return select 조회결과 */ private String selectXML(Connection conn) { String result = ""; StringBuffer sql = new StringBuffer(); OraclePreparedStatement stmt = null; ResultSet rset = null; OracleResultSet orset = null; try{ //e.podoc.getStringVal() : String 으로 변환 //getClobVal()를 이용하면 CLOB으로도 변환 할 수 있습니다. sql.append(" SELECT e.podoc.getStringVal() poString "); sql.append(" FROM po_xml_tab e "); sql.append(" WHERE e.poid=100 "); stmt = (OraclePreparedStatement) conn.prepareStatement(sql.toString()); rset = stmt.executeQuery(); orset = (OracleResultSet) rset; while(orset.next()){ result = orset.getString(1); //String형으로 가져옵니다. } } catch(SQLException sqlexp){ sqlexp.printStackTrace(); } catch(Exception exp){ exp.printStackTrace(); }finally { try { if (rset != null) rset.close(); if (orset != null) orset.close(); if (stmt != null) stmt.close(); } catch (SQLException se) { } } return result; } /** * 일반적인 XMLType update 예제 * @param conn * @return update된 record count */ private int updateXML(Connection conn) { int result = -1; StringBuffer sql = new StringBuffer(); StringBuffer xmlData = new StringBuffer(); OraclePreparedStatement ostmt = null; try{ //저장될 샘플 XML Data xmlData.append("<PO>"); xmlData.append(" <PONO>3</PONO>"); xmlData.append(" <PNAME>Po_3</PNAME>"); xmlData.append(" <CUSTNAME>lion</CUSTNAME>"); xmlData.append(" <SHIPADDR>"); xmlData.append(" <STREET>1033, Main Street</STREET>"); xmlData.append(" <CITY>Seoul</CITY>"); xmlData.append(" <STATE>CA</STATE>"); xmlData.append(" </SHIPADDR>"); xmlData.append("</PO>"); // PONO elements의 값이 1인 데이타를 수정 sql.append(" UPDATE po_xml_tab x "); sql.append(" SET x.poDoc = sys.XMLType.createXML(?) "); sql.append(" WHERE x.poDoc.extract(’/PO/PONO/text()’).getNumberVal()=1 "); ostmt = (OraclePreparedStatement)conn.prepareStatement(sql.toString()); ostmt.setString(1, xmlData.toString()); result = ostmt.executeUpdate(); } catch(SQLException sqlexp){ sqlexp.printStackTrace(); } catch(Exception exp){ exp.printStackTrace(); }finally { try { if (ostmt != null) ostmt.close(); } catch (SQLException se) { } } return result; } /** * XDK API를 이용한 XMLType insert 예제 * xdb.jar, xmlparserv2.jar, nls_charset12.jar를 CLASSPATH에 추가해야 합니다. * xdb.jar : http://www.oracle.com/technology/tech/xml/xdk/software/prod/xdk_java.html * * @param conn * @return insert된 record count */ private int insertXDBXML(Connection conn) { int result = -1; StringBuffer sql = new StringBuffer(); StringBuffer xmlData = new StringBuffer(); OraclePreparedStatement ostmt = null; try{ //저장될 샘플 XML Data xmlData.append("<PO>"); xmlData.append(" <PONO>1</PONO>"); xmlData.append(" <PNAME>Po_1</PNAME>"); xmlData.append(" <CUSTNAME>John</CUSTNAME>"); xmlData.append(" <SHIPADDR>"); xmlData.append(" <STREET>1033, Main Street</STREET>"); xmlData.append(" <CITY>Sunnyvalue</CITY>"); xmlData.append(" <STATE>CA</STATE>"); xmlData.append(" </SHIPADDR>"); xmlData.append("</PO>"); // INSERT 문장 sql.append(" INSERT INTO po_xml_tab (poid, poDoc) "); sql.append(" VALUES (po_xml_tab_seq.NEXTVAL, ?) "); ostmt = (OraclePreparedStatement)conn.prepareStatement(sql.toString()); // XMLType API를 이용 XMLType poXML = XMLType.createXML(conn, xmlData.toString()); ostmt.setObject(1, poXML); result = ostmt.executeUpdate(); } catch(SQLException sqlexp){ sqlexp.printStackTrace(); } catch(Exception exp){ exp.printStackTrace(); }finally { try { if (ostmt != null) ostmt.close(); } catch (SQLException se) { } } return result; } /** * java test.XMLTypeTest INSERT */ public static void main(String[] args){ XMLTypeTest test = new XMLTypeTest(); Connection conn = null; try{ DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); conn = DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:ORA9I", "scott", "tiger"); if(args[0] != null && "INSERT".equals(args[0])){ int result = test.insertXML(conn); log(result+" 개의 행이 INSERT 되었습니다.!!"); }else if(args[0] != null && "XDKINSERT".equals(args[0])){ int result = test.insertXDBXML(conn); log(result+" 개의 행이 INSERT 되었습니다.!!"); }else if(args[0] != null && "SELECT".equals(args[0])){ String result = test.selectXML(conn); log(" 조회결과 : "+result); }else if(args[0] != null && "UPDATE".equals(args[0])){ int result = test.updateXML(conn); log(result+" 개의 행이 UPDATE 되었습니다.!!"); }else{ log("test.XMLTypeTest argument "); log("argument : INSERT or XDKINSERT or SELECT or UPDATE "); } }catch(SQLException sqle){ sqle.printStackTrace(); }finally { try { if (conn != null) conn.close(); } catch (SQLException se) { } } } private static void log(String msg){ System.out.println(msg); } }
- 강좌 URL : http://www.gurubee.net/lecture/1872
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.