使用XMLAGG函数的SQL在Java中执行时不检索结果

时间:2016-11-28 23:34:49

标签: java sql oracle

我一直在尝试通过JDBC连接使用java程序执行Oracle SQL查询。 在SQL查询中,我使用的是XMLAGG函数。

以下是与我使用的类似的查询示例:

SELECT XMLAGG(XMLELEMENT(E,ename||',')).EXTRACT('//text()') "Result" FROM `employee_names`

结果应该如下所示:

Result

-------------------------------------------------------------------

SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS

当我使用Java程序执行此查询时,我获得该列值的null

如果有人遇到类似问题并解决了,请告诉我解决方案。

感谢
元帅

1 个答案:

答案 0 :(得分:0)

XMLAGG返回聚合的XML文档。您的程序是否使用xdb6.jar来解析文档?如果没有,那么当XML文档作为字符串检索时,检索会进入XMLParseException

最佳解决方法是使用getstringval() XMLAGG方法将值检索为字符串。

因此,您更新的查询字符串将如下所示:

String qry = "SELECT XMLAGG(XMLELEMENT(E,ename||',')).EXTRACT('//text()').getstringval()" +
             " FROM employee_names";

以下示例程序在我的最后工作正常:

import java.sql.*;

public class XMLAggTest {
    public static void main(String[] args) {
        try {
            Connection con=null;
            Class.forName("oracle.jdbc.OracleDriver");
            con=DriverManager.getConnection("jdbc:oracle:thin:hr/hr@myhost:1521:bct01");
            if(con != null)
            {
                String upq="SELECT XMLAGG(XMLELEMENT(E,first_name||',')).EXTRACT('//text()').getstringval()" +
                           " FROM employees";


                PreparedStatement pStat;
                try {
                    pStat = con.prepareStatement(upq);
                    ResultSet rSet = pStat.executeQuery();
                    while(rSet.next()){
                        System.out.println(rSet.getString(1));
                    }
                    rSet = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                pStat = null;

            }
            con.close();

        } catch(Exception e){e.printStackTrace();}
    }
}