问题描述
求哥哥姐姐帮忙,我只想把下面那个xml文件成功导入到数据库中代码如下:importjava.io.File;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.Iterator;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;publicclassImportXml{@SuppressWarnings("unchecked")publicstaticvoidimportXml(StringfilePath){System.out.println("============开始导入============");//-------------jdbc代码try{Class.forName("oracle.jdbc.driver.OracleDriver");Stringurl="jdbc:oracle:thin:@172.18.8.22:1521:xlsdb";Stringuser="cdc";Stringpassword="cdc";Connectioncon=DriverManager.getConnection(url,user,password);if(!con.isClosed()){System.out.print("连接成功!n");}//打开事物con.setAutoCommit(false);//SQL执行语句StringexeSql="";//插入值StringinsertValue="";//插入的列名StringinsertColumName="";//更新的SQL语句StringupdateSQL="";//SQL操作语句(用来判断数据库里有没有记录等)StringoptionSql="";//当前记录的ID值StringrowID="";//ID的列名StringidName="";intflag=0;//------------读取XML文件,获得document对象.SAXReaderreader=newSAXReader();reader.setEncoding("GBK");Documentdocument=null;document=reader.read(newFile(filePath));//-----------获取文档的根节点.Elementroot=document.getRootElement();//遍历所有table节点for(IteratorrootIter=root.elementIterator("xls");rootIter.hasNext();){ElementtableNode=(Element)rootIter.next();//得到table节点的Name属性值,用来判断属于哪一个数据库表StringtableName=tableNode.attributeValue("name");//打印数据库表名System.out.println("数据库表名:"+tableName);//取得table节点下的所有子节点,并且遍历for(IteratortableIter=tableNode.elementIterator();tableIter.hasNext();){Elementrow=(Element)tableIter.next();//得到每一条记录里面的数据for(IteratorrowIter=row.elementIterator();rowIter.hasNext();){flag++;Elementcol=(Element)rowIter.next();if(flag==1){rowID=col.getText();idName=col.getName();}//得到当前节点的名字,用来判断属于数据库中的哪一列StringcolumName=col.getName();//得到该节点的字段类型StringcolumType=col.attributeValue("type");//得到当前节点的值,用来插入数据库中//列值。默认为空字符StringcolumValue="";//判断节点字段的类型,然后转换字段类型if(columType.equals("date")){columValue="to_date(substr('"+col.getText()+"',1,10),'yyyy-MM-dd')";}else{columValue="'"+col.getText()+"'";//System.out.println(columType);}//判断是否为最后一个,如果是则不加','号if(rowIter.hasNext()){insertValue+=columValue+",";insertColumName+=columName+",";}else{insertValue+=columValue;insertColumName+=columName;}//判断是否为最后一个,如果是则不加','号if(rowIter.hasNext()){updateSQL+=columName+"="+columValue+",";}else{updateSQL+=columName+"="+columValue;}}optionSql="select*from"+tableName+"where"+idName+"='"+rowID+"'";PreparedStatementoptionps=con.prepareStatement(optionSql);ResultSetopRS=optionps.executeQuery();System.out.println(optionSql);//假如数据库里没有记录则插入if(!opRS.next()){exeSql="insertinto"+tableName+"("+insertColumName+")"+"values("+insertValue+")";PreparedStatementps=con.prepareStatement(exeSql);System.out.println("插入");System.out.println(exeSql);ps.execute();opRS.close();optionps.close();ps.close();}else{//假如数据库里有记录则更新exeSql="update"+tableName+"set"+updateSQL+"where"+idName+"="+"'"+rowID+"'";PreparedStatementps=con.prepareStatement(exeSql);System.out.println("更新");System.out.println(exeSql);ps.execute();opRS.close();optionps.close();ps.close();}//插入完一条记录以后清空记录信息exeSql="";insertValue="";insertColumName="";updateSQL="";optionSql="";rowID="";idName="";flag=0;}}con.commit();con.close();System.out.println("============导入完成============");}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicstaticvoidmain(String[]args){importXml("D:/xml_data/xls.xml");}}xls.xml:<?xmlversion="1.0"encoding="GB2312"?><xls_dataname="训练伤数据"time="2009-04-1419:48:23"reporter_code="6003001"><xlsname="训练伤"><tablename="xlscard"><recordtype="1"><carecardid></carecardid><name></name><sex></sex><birthdate></birthdate><recruitdate></recruitdate><unit></unit><regionunit></regionunit><unitzone>1</unitzone><identify>2012-2-10</identify><corps>3</corps><injurydate></injurydate><injurysubject></injurysubject><currahee></currahee><desposetype>34010101</desposetype><sendhospital>22</sendhospital><checkindate></checkindate><leavedate>11010100</leavedate><injurypart></injurypart><injurytype></injurytype><diagnose></diagnose><severity>1</severity><back>0</back><absentdays>2012-7-3</absentdays><injuryfactor>2012-7-317:00:00</injuryfactor><remark></remark><reporter>2</reporter><reportertel></reportertel><reportdate></reportdate><carddate></carddate><repeated></repeated><deleted>29</deleted><validcard></validcard><verified>34010101</verified><confirmed>李四</confirmed><reportunit></reportunit><unitclass>2012-7-3</unitclass><age>2012-7-317:11:59</age><injurytypes></injurytypes></record></table></xls></xls_data>
解决方案
解决方案二:
不是说表明找不到吗?怎么是中文的。。。
解决方案三:
引用1楼scmod的回复:
不是说表明找不到吗?怎么是中文的。。。
我也不知道啊。
解决方案四:
解决方案五:
你的节点取错了,要取这个节点!!!!!
解决方案六:
你取得的表名是不对的。