java学习——XML文件导入

       刚学习java不久,在做DRP分销商管理这个项目中,发现很多新东西,需要我们不断总结。今天我们就来介绍一下导入XML文件。

       在实际应用中,导入是一项很重要的功能,一般来说我们常用的是导入Excel,Word等,但是今天我们要导入的是XML文件,因为XML是一种纯文本文件,具有很好的兼容性和可扩展性,在数据传输和共享的时候更具有通用性。


1、需要导入的XML文件

       文件中每一个标签如< NUMERO >、< REPOSICION >等,对应数据库中的一个字段。当我们引入相应的jar包,如dom4j等,之后就可以编写导入的方法。

<?xml version="1.0" encoding="utf-8"?>
<ACCESOS>
    <item>
        <SOCIO>
            <NUMERO>00045050</NUMERO>
            <REPOSICION>0</REPOSICION>
            <NOMBRE>MOISES MORENO</NOMBRE>
            <TURNOS>
                <LU>T1</LU>
                <MA>T2</MA>
                <MI>T3</MI>
                <JU>T4</JU>
                <VI>T5</VI>
                <SA>T6</SA>
                <DO>T7</DO>
            </TURNOS>
        </SOCIO>
    </item>
    <item>
        <SOCIO>
            <NUMERO>00045051</NUMERO>
            <REPOSICION>0</REPOSICION>
            <NOMBRE>RUTH PENA</NOMBRE>
            <TURNOS>
                <LU>S1</LU>
                <MA>S2</MA>
                <MI>S3</MI>
                <JU>S4</JU>
                <VI>S5</VI>
                <SA>S6</SA>
                <DO>S7</DO>
            </TURNOS>
        </SOCIO>
    </item>
</ACCESOS>

2、连接数据库的类方法

       此类用于连接数据库,类似于之前在.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) {
        }
    }
}

3、执行导入的类

       利用此类,读取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();
        }
    }
}

4总结

       我们在学习过程中,不要仅仅为了实现功能,最主要的还是了解实现的这个过程,这种思路,当我们下次再导入其他格式的文件时就可以自己动手实现了。总之,学习在于总结出的学习方法,如何让学习变得简单,就看我们怎么做总结了。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
您好!对于使用 Java 进行 XML 格式的 EasyExcel 导入操作,您可以按照以下步骤进行: 1. 首先,确保您已经引入了 EasyExcel 相关的依赖包。您可以使用 Maven 或 Gradle 等构建工具,在项目的 pom.xml 或 build.gradle 文件中添加相应的依赖。 2. 创建一个 Java 类作为数据实体,用于存储导入的数据。您可以根据 XML 的结构定义相应的属性。 3. 使用 EasyExcel 提供的 API,编写导入代码。首先,您需要创建一个监听器类,用于处理读取到的每一行数据。监听器类需要实现 `AnalysisEventListener` 接口,并重写其中的方法。 例如,您可以创建一个名为 `ExcelListener` 的监听器类,其中的 `invoke` 方法用于处理每一行数据的逻辑: ```java public class ExcelListener extends AnalysisEventListener<YourDataEntity> { @Override public void invoke(YourDataEntity data, AnalysisContext context) { // 在这里编写处理每一行数据的逻辑 // 可以将数据存储到数据库中或进行其他操作 } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 数据读取完成后的逻辑处理 } } ``` 4. 在导入代码中,使用 EasyExcel 提供的 API 进行解析 XML 并调用监听器处理数据。例如: ```java public void importXml(String filePath) { ExcelReader excelReader = EasyExcel.read(filePath, YourDataEntity.class, new ExcelListener()).build(); ReadSheet readSheet = EasyExcel.readSheet(0).build(); excelReader.read(readSheet); excelReader.finish(); } ``` 在上述代码中,`ExcelReader` 用于读取 XML 文件,`ReadSheet` 用于指定要读取的 sheet 表。`YourDataEntity.class` 是您创建的数据实体类。 5. 调用 `importXml` 方法,并传入 XML 文件的路径,即可实现导入操作。 请注意,以上代码仅为示例,您需要根据实际情况进行适当的修改和调整。 希望对您有所帮助!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值