有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用java将XML文件加载到Oracle18c上的XMLType列

我有一个复杂的目录系统,其中包含数百万个xml文件,我需要在Oracle18c中检索到一个XMLType列。我正在使用一个java方法,该方法由一个过程执行,以在这个特定的表上重新加载这个文件。因为很多java库都被弃用了,所以我没有办法解决这个问题。我找到的解决方法是一个临时表,其中有一个CLOB列,我可以在其中插入文件中的内容,而在oracle内部,我使用XMLType(clobVariable)将这些内容插入原始表中。但是,它不适用于大于20k字符的文件

如果有人能帮助我,我非常乐意提供更多的信息。 (我来自巴西,顺便说一句,也许我没有把自己的解释说清楚)

public static void inserirXml() throws Exception{
    try {
        int num_id_nfe;
        String dirArquivo = "";
        String query;
        String queryUpdate;
        String reCheck, insert;

        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection("jdbc:default:connection:");

        conn.setAutoCommit(false);               

        query = "SELECT ID_NFE, DSC_CAMINHO_XML FROM DFE_NFE_CAMINHO_XML WHERE FLG_CARREGADO = 0 AND ROWNUM <= 1000";

        Statement stmt = conn.createStatement();
        Statement stmt2 = conn.createStatement();
        Statement stmt3 = conn.createStatement();
        Statement stmt4 = conn.createStatement();

        stmt.executeQuery(query);

        ResultSet rset = stmt.getResultSet();

        while(rset.next() == true) {
            try {
                
                num_id_nfe = rset.getInt(1);
                dirArquivo = rset.getString(2);

                byte[] bytes = Files.readAllBytes(Paths.get(dirArquivo));
                
                String xmlString = new String(bytes, "utf-8");
             
                String insertQuery =   "INSERT INTO DFE_NFE_REP_XML_TMP (ID_NFE, XMLCLOB) VALUES(?,?)";

                PreparedStatement pstmt = conn.prepareStatement(insertQuery);
                xmlString = xmlString.substring(1);
                pstmt.setInt(1, num_id_nfe);
                pstmt.setNString(2, xmlString);
                pstmt.execute();

                pstmt.close();

                queryUpdate =   "UPDATE DFE_NFE_CAMINHO_XML SET FLG_CARREGADO = 1 WHERE ID_NFE = " + num_id_nfe + " \n";
                stmt2.executeQuery(queryUpdate);

            }catch(SQLException e) {
                System.err.println(e.getMessage()+" loop");

                stmt2.close();
                throw e;
            }
        }
        insert = "INSERT INTO DFE_NFE_REP_XML (ID_NFE, CONTEUDO) SELECT ID_NFE, XMLType(XMLCLOB) FROM DFE_NFE_REP_XML_TMP";
        stmt4.executeUpdate(insert);

        reCheck = "UPDATE DFE_NFE_CAMINHO_XML SET FLG_CARREGADO = 0 WHERE id_nfe not in (select id_nfe from dfe_nfe_rep_xml) and flg_carregado = 1";
        stmt3.executeQuery(reCheck);

        conn.commit();
        rset.close();           
        stmt.close();
        stmt2.close();
        stmt3.close();
        stmt4.close();
        conn.close();           

    } catch (SQLException x) {
        System.err.println(x.getMessage()+" geral");
    }catch (ClassNotFoundException y) {
        throw y;
    }catch(Exception z) {
        throw z;
    }
}

共 (0) 个答案