package xxx; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import xxx.hf.jdbc.StoreIntoMysql; /* * 解析30条后插入到数据,然后继续插入 * * */ public class XmlToMysql { private Document doc = null; public XmlToMysql(String xmlFile) { try { SAXReader reader = new SAXReader(); doc = reader.read(xmlFile); } catch (Exception e) { e.printStackTrace(); } } /* * 返回解析到的元素个数 */ public int getInfos(String str, String sds) { // str ="Patient"; ArrayList<String[]> infos = new ArrayList<String[]>(); // 标识是最后的30条记录或者不足30条 boolean last = false; // 获得所有str元素 List strs = doc.selectNodes("//" + str); System.out.println(strs.size()); // System.exit(0); // 遍历指定的所有元素 for (int j = 0; j < strs.size(); j++) { Element eAdd = ((Element) strs.get(j)); // 遍历指定元素的子元素 String[] strArray = null; if (str.equals("Patient")) { strArray = new String[16]; } else { strArray = new String[15]; } int m = 0; for (Iterator i = eAdd.elementIterator(); i.hasNext();) { Element node = (Element) i.next(); // System.out.println(node.getName() + ":" + node.getText()); // 处理特别的字符串 if (node.getText().indexOf(":") > 0) { // 这里处理时间问题,插入datetime不会出错 strArray[m] = node.getText().toString().substring(0, 19) .replace("T", " "); } else { strArray[m] = node.getText().toString(); } m++; } infos.add(strArray); // 判断是否到达最后1条记录 if (j == (strs.size() - 1)) { System.out.println("这是最后一条记录"); System.out.println(j); // 设置标识 last = true; } // 如果集合的长度有30条,就commit一次 // 或则是最后一条记录的时候 if (infos.size() >= 30 || last) { // 存入数据库 if(str.equals("Patient")){ StoreIntoMysql.StorePatient(infos, sds + str); }else{ StoreIntoMysql.StoreTreat(infos, sds + str); } // 集合清空 infos.clear(); } } return strs.size(); } }
主要的问题是在于,最后的30条或不足30条。
这里采用的一个变量来判断
这里发现的问题是:集合的清空,我用的clear方法,但是手册中提示过时了,removeAll() 方法没看懂怎么用