本文共 7045 字,大约阅读时间需要 23 分钟。
刚学习java不久,在做DRP分销商管理这个项目中,发现很多新东西,需要我们不断总结。今天我们就来介绍一下导入XML文件。
在实际应用中,导入是一项很重要的功能,一般来说我们常用的是导入Excel,Word等,但是今天我们要导入的是XML文件,因为XML是一种纯文本文件,具有很好的兼容性和可扩展性,在数据传输和共享的时候更具有通用性。
文件中每一个标签如< NUMERO >、< REPOSICION >等,对应数据库中的一个字段。当我们引入相应的jar包,如dom4j等,之后就可以编写导入的方法。
00045050 0 MOISES MORENO T1 T2 T3 T4 T5 T6 T7 00045051 0 RUTH PENA S1 S2 S3 S4 S5 S6 S7
此类用于连接数据库,类似于之前在.net那边使用的SQLHelper。
/** * 封装数据常用操作 * @author Administrator * */public class DbUtil { /** * 取得Connection * @return */ public static Connection getConnection(){ Connection conn=null; try { Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动 String url="jdbc:oracle:thin:@192.168.26.206:1521:ORCL"; //连接数据库的用户名和密码 String username="shiqidrp"; String password="shiqidrp"; conn=DriverManager.getConnection(url,username,password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } /** * 关闭ResultSet对象,释放资源 * @param rs */ public static void close(ResultSet rs) { if(rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 关闭Connection对象,释放资源 * @param conn */ public static void close(Connection conn) { if(conn!=null) { try { conn.close(); }catch(SQLException e) { e.printStackTrace(); } } } /** * 关闭PreparedStatement对象,释放资源 * @param pstmt */ public static void close(PreparedStatement pstmt) { if(pstmt!=null) { try { pstmt.close(); }catch(SQLException e) { e.printStackTrace(); } } } /** * 关闭Statement对象,释放资源 * @param pstmt */ public static void close(Statement pstmt) { if(pstmt!=null) { try { pstmt.close(); }catch(SQLException e) { e.printStackTrace(); } } } /** * 开启事务 * @param conn */ public static void beginTransaction(Connection conn) { try { if(conn!=null){ if(conn.getAutoCommit()) { conn.setAutoCommit(false); } } } catch (SQLException e) { } } /** * 关闭事务 * @param conn */ public static void commitTransaction(Connection conn) { try { if(conn!=null){ if(!conn.getAutoCommit()) { conn.commit(); } } } catch (SQLException e) { } } /** * 回滚事务 * @param conn */ public static void rollbackTransaction(Connection conn) { try { if(conn!=null){ if(!conn.getAutoCommit()) { conn.rollback(); } } } catch (SQLException e) { } } /** * 重置事务 * @param conn */ public static void resetTransaction(Connection conn) { try { if(conn!=null){ if(conn.getAutoCommit()) { conn.setAutoCommit(false); }else{ conn.setAutoCommit(true); } } } catch (SQLException e) { } }}
利用此类,读取XML文件中的数据并保存到数据库中。
public class TestXMLImport { /** * @param args */ public static void main(String[] args) { String sql = "insert into T_XML(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?)"; Connection conn = null; PreparedStatement pstmt = null; try { conn=DbUtil.getConnection(); pstmt=conn.prepareStatement(sql); //可以解析XML文件的对象 Document document=new SAXReader().read(new File("G:/提高班/7DRP/drp/test_xmlImport/xml/test01.XML")); //获得我们所需要的节点集 List itemList=document.selectNodes("/ACCESOS/item/SOCIO"); //循环得到节点集中元素,并转化成SQL语句 for(Iterator iterator=itemList.iterator();iterator.hasNext();) { //得到相应的节点的值 Element element=(Element)iterator.next(); String numero = element.elementText("NUMERO"); String reposicion = element.elementText("REPOSICION"); String nombre = element.elementText("NOMBRE"); List turnosList=element.elements("TURNOS"); StringBuffer sbBuffer=new StringBuffer(); //循环得到TURNOS节点下的元素,并拼成串 for(Iterator iterator1=turnosList.iterator();iterator1.hasNext();) { Element turnosElt = (Element)iterator1.next(); String lu = turnosElt.elementText("LU"); String ma = turnosElt.elementText("MA"); String mi = turnosElt.elementText("MI"); String ju = turnosElt.elementText("JU"); String vi = turnosElt.elementText("VI"); String sa = turnosElt.elementText("SA"); String doo = turnosElt.elementText("DO"); sbBuffer.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo); } //给SQL语句赋值 pstmt.setString(1, numero); pstmt.setString(2, reposicion); pstmt.setString(3, nombre); pstmt.setString(4, sbBuffer.toString()); //保存生成的SQL语句 pstmt.addBatch(); } //批量执行SQL语句 pstmt.executeBatch(); System.out.println("將xml導入成功"); } catch (Exception e) { e.printStackTrace(); } }}
我们在学习过程中,不要仅仅为了实现功能,最主要的还是了解实现的这个过程,这种思路,当我们下次再导入其他格式的文件时就可以自己动手实现了。总之,学习在于总结出的学习方法,如何让学习变得简单,就看我们怎么做总结了。
转载地址:http://jumei.baihongyu.com/