分30条依次解析xml并插入数据库成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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() 方法没看懂怎么用

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。