日期:2014-05-19  浏览次数:20798 次

求助 解析xml引起数据库死锁
 搞了很久都不知道为什么会出现数据库死锁,也不知道怎么解决,求各位牛人不吝赐教

我写了一个定时器 定时读取某一固定目录的文件(xml格式)

然后循环解读xml 并把xml中的部分字段拿出来放到实体中,插入数据库

过程就是这么简单 ,用的是dom4j解析器,可是总是跑着跑着就发生了数据库死锁 ,搞不明白为什么

代码如下(**是我注释掉了,涉密)

private void readFiles(List<String> filecontents) throws Exception {
// TODO Auto-generated method stub

for (int i=0;i< filecontents.size();i+=2){
String messageType = filecontents.get(i).split("\\.")[1];
SAXReader saxReader = new SAXReader(); 
Document doc = saxReader.read(new ByteArrayInputStream(filecontents.get(i+1).getBytes())); 
Element root = doc.getRootElement();   
Element foo; 
        if (messageType.equalsIgnoreCase("***")||messageType.equalsIgnoreCase("***")){
          Trtask tk = new Trtask();
          for (Iterator k = root.elementIterator("***"); k.hasNext();) { 
            foo = (Element) k.next();    
            messageType = foo.elementText("***");
            tk.creationTime = Timestamp.valueOf(foo.elementText("creationTime").replace("T", " "));
            tk.originatorAddress = getXmlEnumLabel(foo.elementText("***").trim(), "***");
            tk.messageID = foo.elementText("messageID");
            tk.messageType = messageType;  
          }
          for (Iterator j = root.elementIterator("FileBody");j.hasNext();){
            foo = (Element) j.next();    
            tk.sid = SpeedIDUtil.getId();
                                                 tk.fileContent = filecontents.get(i+1);
          }
          dao.insertOrUpdate(tk);
        }else if(messageType.equalsIgnoreCase("***")||messageType.equalsIgnoreCase("***")){
          Gendata gd = new Gendata();
          for (Iterator k = root.elementIterator("FileHeader"); k.hasNext();) { 
            foo = (Element) k.next();    
            System.out.println("头文件部分"+foo.elementText("messageType"));