zoukankan      html  css  js  c++  java
  • 分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 OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    flowable 获取当前任务流程图片的输入流
    最新 接口api插件 Swagger3 更新配置详解
    springboot 集成 activiti 流程引擎
    java 在线考试系统源码 springboot 在线教育 视频直播功能 支持手机端
    阿里 Nacos 注册中心 配置启动说明
    springboot 集成外部tomcat war包部署方式
    java 监听 redis 过期事件
    springcloudalibaba 组件版本关系
    java WebSocket 即时通讯配置使用说明
  • 原文地址:https://www.cnblogs.com/jsRunner/p/3566506.html
Copyright © 2011-2022 走看看