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


    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() 方法没看懂怎么用

    QQ:540045865 热爱生活,热爱编程。
  • 相关阅读:
    在Java中使用 break/continue 语句来控制多重嵌套循环的跳转
    Android系统架构基本模式解析
    添加蓝牙通讯功能
    wince串口蓝牙
    Android各层推荐开发书籍及参考资料
    CDEFINES的用法
    蓝牙地址的规则
    WinCE中sources文件中targetlibs与sourcelibs的作用与区别
    Java初学者不得不知的概念,JDK,JRE,JVM的区别?
    WINCE的内存配置config.bib文件的解析
  • 原文地址:https://www.cnblogs.com/jsRunner/p/3566506.html
Copyright © 2020-2023  润新知