시소당
[01] XML을 DB로 변환
1. XML 데이터 파일
DELETE FROM office;
COMMIT;
SELECT officenum, company, area, rent FROM office;
>>>>> WebContent/xml/office/office_Y2007M7D25_H8M50S29.xml
<?xml version="1.0" encoding="euc-kr"?>
<officeList>
<office>
<officenum>5</officenum>
<company>(주)IT</company>
<area>200</area>
<rent>10000000</rent>
</office>
<office>
<officenum>6</officenum>
<company>(주)WEB</company>
<area>200</area>
<rent>10000000</rent>
</office>
<office>
<officenum>7</officenum>
<company>(주)SI</company>
<area>200</area>
<rent>10000000</rent>
</office>
</officeList>
2. Manager Class
>>>>> XMLtoDB.java
package www.xml;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import www.utility.ConnectionPoolMgr;
//XML --> DB
public class XMLtoDB {
/** Connection Pool */
private ConnectionPoolMgr dbconnect=null;
private String xml_dir;
private String xml_name;
SAXBuilder builder;
Document doc;
Element root;
public XMLtoDB(){
xml_dir = "F:/200708_ojt1330/eclipse/workspace/www_pilot/WebContent/xml/office/";
xml_name= "office.xml";
try {
builder = new SAXBuilder();
doc = builder.build(new File(xml_dir, xml_name));
dbconnect = new ConnectionPoolMgr(); //접속 개체 생성
}catch(Exception ex) {
ex.printStackTrace();
}
}
public XMLtoDB(int DBCPMode){
xml_dir = "F:/200708_ojt1330/eclipse/workspace/www_pilot/WebContent/xml/office/";
xml_name= "office.xml";
try {
builder = new SAXBuilder();
doc = builder.build(new File(xml_dir, xml_name));
dbconnect = new ConnectionPoolMgr(DBCPMode); //접속 개체 생성
}catch(Exception ex) {
ex.printStackTrace();
}
}
public XMLtoDB(int DBCPMode, String xml_name){
xml_dir = "F:/200708_ojt1330/eclipse/workspace/www_pilot/WebContent/xml/office/";
this.xml_name = xml_name;
try {
builder = new SAXBuilder();
doc = builder.build(new File(xml_dir, xml_name));
dbconnect = new ConnectionPoolMgr(DBCPMode); //접속 개체 생성
}catch(Exception ex) {
ex.printStackTrace();
}
}
/**
* officelist태그 기준으로 offcie 태그를 읽어 Vector형태로 리턴
*
* <officeList>
* <office>
* <officenum></officenum>
* <company></company>
* <area></area>
* <rent></rent>
* </office>
* <office>
* <officenum></officenum>
* <company></company>
* <area></area>
* <rent></rent>
* </office>
* </officeList>
*/
private Vector XMLtoObject(){
List list = null;
Vector dataList = new Vector();
try{
// officeList root태그 산출
root = doc.getRootElement();
// 여러개의 Address태그를 읽어 옵니다.
list=root.getChildren("office");
Iterator it = list.iterator();
while ( it.hasNext()){
Element element = (Element)it.next();
OfficeDTO officeDTO = new OfficeDTO();
int officenum = Integer.parseInt(element.getChild("officenum").getText());
String company = element.getChild("company").getText();
int area = Integer.parseInt(element.getChild("area").getText());
int rent = Integer.parseInt(element.getChild("rent").getText());
officeDTO.setOfficenum(officenum);
officeDTO.setCompany(company);
officeDTO.setArea(area);
officeDTO.setRent(rent);
dataList.add(officeDTO); //Vector 에 저장
}
}catch(Exception e){
e.printStackTrace();
}
return dataList;
}
// Vector를 DB로 변환
private void ObjecttoDB(Vector dataList){
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
StringBuffer sql=null;
Iterator it = dataList.iterator();
try{
con = dbconnect.getConnection(); //데이터베이스 접속
sql = new StringBuffer();
sql.append(" INSERT INTO office(officenum, company, area, rent)");
sql.append(" VALUES(office_officenum.nextval,?,?,?)");
pstmt = con.prepareStatement(sql.toString());
while (it.hasNext()){
OfficeDTO officeDTO = (OfficeDTO)it.next();
pstmt.setString(1, officeDTO.getCompany());
pstmt.setInt(2, officeDTO.getArea());
pstmt.setInt(3, officeDTO.getRent());
pstmt.executeUpdate();
}
}catch(Exception e){
e.printStackTrace();
}
}
//XML을 DB로 변환하는 메소드 호출, XML ---> DTO ---> Vector --> DB
public void convertXMLtoDB(){
//DB에서 레코드 추출
try{
Vector dataList = XMLtoObject();
ObjecttoDB(dataList);
}catch(Exception e){
System.out.println(e);
}
System.out.println("DB로 변환을 성공했습니다.");
}
}
3. Test
>>>>> XMLtoDB_Test.java
package test.www.xml;
import www.xml.XMLtoDB;
public class XMLtoDB_convertXMLtoDB {
public static void main(String[] args) {
XMLtoDB mgr = new XMLtoDB(1, "office_Y2007M7D25_H8M50S29.xml");
mgr.convertXMLtoDB();
}
}
[출처] [24-D12][XML] XML을 DB로 변환, XMLtoDB.java|작성자 푸우하하
http://blog.naver.com/poohhahahaha/10024310965