import java.io.FileReader;
import java.sql.Connection;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Iterator;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import com.util.DBConnection;
import com.util.FileLog;
/**
* 功能:解析xml文件,并导入数据库中
* @author zhangjl
*
*/
public class ParseXML extends DefaultHandler{
/*
* 存贮一行信息
*/
private HashMap<String, String> column = new HashMap<String, String>();
/*
* 当前节点名称
*/
private String currentName = null;
/*
* 当前节点值
*/
private StringBuffer currentValue = new StringBuffer();
private Connection cn = null;
public void startDocument () throws SAXException
{
try {
cn = DBConnection.getConnection("debt");
} catch (Exception e) {
FileLog.writeLog(e);
}
}
/**
* 元素开始
*/
public void startElement( String namespaceURI,
String localName,
String qName, Attributes attr )
throws SAXException {
currentValue.delete(0, currentValue.length());
if (qName.equals("tb_app_upgwrunlog")||qName.equals("column")) {
} else {
currentName = qName;
}
}
/***
* 获得中间内容
*/
public void characters( char[] ch, int start, int length )
throws SAXException {
currentValue.append(new String(ch, start, length));
}
/**
* 元素结束
*/
public void endElement( String namespaceURI,
String localName, String qName )
throws SAXException {
if (qName.equals("tb_app_upgwrunlog")||qName.equals("column")) {
} else {
if (!currentValue.equals("null")){
column.put(currentName, currentValue.toString());
}
}
if (qName.equals("column")) {
try {
insert(column);
} catch (Exception e) {
e.printStackTrace();
closeConnection();
}
column.clear();
}
}
public void endDocument () throws SAXException
{
closeConnection();
}
private void closeConnection() {
try {
if (cn != null){
cn.close();
}
} catch (Exception e) {
FileLog.writeLog(e);
}
}
/**
* 建解析xml工厂
* @param path
*/
public void parseXMLContent(String path) throws Exception {
try {
/*SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new File(path), new ParseXML());*/
XMLReader xr = XMLReaderFactory.createXMLReader ();
xr.setContentHandler( new ParseXML() );
xr.parse(new InputSource(new FileReader(path)));
} catch (Exception e) {
throw e;
}
}
private void insert(HashMap<String, String> columns) throws Exception {
String SQL = "insert into tb_app_upgwrunlog(";
StringBuffer col_name = new StringBuffer();
StringBuffer col_value = new StringBuffer();
Statement st = cn.createStatement();
Iterator<String> iterator= column.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
col_name = col_name.append(key + ",");
col_value = col_value.append("'" + column.get(key) + "',");
}
SQL = SQL + col_name + "ul_checkflag,ul_import_time) values(" + col_value + "0,getDate())";
st.execute(SQL);
st.close();
}
public static void main(String args[]) {
ParseXML xml = new ParseXML();
try {
xml.parseXMLContent("E:/UnionpayBedt/tb_app_upgwrunlog.xml");
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:
characters方法有一句话:“ SAX 规范没有要求处理器以任何特定方式返回字符,因此在多个部分中返回单个文本块是可能的。在假设您有某个元素的所有内容之前,始终要确保
endElement
事件已经发生
”,所以在characters方法中采取.append的方式,直到endElement时才将值放到HashMap中,还要记得清除currentValue中的值哦.
import java.sql.Connection;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Iterator;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import com.util.DBConnection;
import com.util.FileLog;
/**
* 功能:解析xml文件,并导入数据库中
* @author zhangjl
*
*/
public class ParseXML extends DefaultHandler{
/*
* 存贮一行信息
*/
private HashMap<String, String> column = new HashMap<String, String>();
/*
* 当前节点名称
*/
private String currentName = null;
/*
* 当前节点值
*/
private StringBuffer currentValue = new StringBuffer();
private Connection cn = null;
public void startDocument () throws SAXException
{
try {
cn = DBConnection.getConnection("debt");
} catch (Exception e) {
FileLog.writeLog(e);
}
}
/**
* 元素开始
*/
public void startElement( String namespaceURI,
String localName,
String qName, Attributes attr )
throws SAXException {
currentValue.delete(0, currentValue.length());
if (qName.equals("tb_app_upgwrunlog")||qName.equals("column")) {
} else {
currentName = qName;
}
}
/***
* 获得中间内容
*/
public void characters( char[] ch, int start, int length )
throws SAXException {
currentValue.append(new String(ch, start, length));
}
/**
* 元素结束
*/
public void endElement( String namespaceURI,
String localName, String qName )
throws SAXException {
if (qName.equals("tb_app_upgwrunlog")||qName.equals("column")) {
} else {
if (!currentValue.equals("null")){
column.put(currentName, currentValue.toString());
}
}
if (qName.equals("column")) {
try {
insert(column);
} catch (Exception e) {
e.printStackTrace();
closeConnection();
}
column.clear();
}
}
public void endDocument () throws SAXException
{
closeConnection();
}
private void closeConnection() {
try {
if (cn != null){
cn.close();
}
} catch (Exception e) {
FileLog.writeLog(e);
}
}
/**
* 建解析xml工厂
* @param path
*/
public void parseXMLContent(String path) throws Exception {
try {
/*SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new File(path), new ParseXML());*/
XMLReader xr = XMLReaderFactory.createXMLReader ();
xr.setContentHandler( new ParseXML() );
xr.parse(new InputSource(new FileReader(path)));
} catch (Exception e) {
throw e;
}
}
private void insert(HashMap<String, String> columns) throws Exception {
String SQL = "insert into tb_app_upgwrunlog(";
StringBuffer col_name = new StringBuffer();
StringBuffer col_value = new StringBuffer();
Statement st = cn.createStatement();
Iterator<String> iterator= column.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
col_name = col_name.append(key + ",");
col_value = col_value.append("'" + column.get(key) + "',");
}
SQL = SQL + col_name + "ul_checkflag,ul_import_time) values(" + col_value + "0,getDate())";
st.execute(SQL);
st.close();
}
public static void main(String args[]) {
ParseXML xml = new ParseXML();
try {
xml.parseXMLContent("E:/UnionpayBedt/tb_app_upgwrunlog.xml");
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:
characters方法有一句话:“