2016-11-28 17 views
0

我一直试图通过JDBC连接使用java程序执行Oracle SQL查询。 在SQL查询中,我使用了XMLAGG函数。使用XMLAGG函数的SQL在Java中执行时不检索结果

下面是查询的样本是相似,我用:

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

结果应该如图6-8所示:

Result 

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

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

当我使用一个执行这个查询Java程序,我得到该列值null

如果有人遇到类似的问题并解决它,请让我知道解决方案。

感谢
元帅

回答

0

XMLAGG返回一个汇总的XML文档。您的程序是否使用xdb6.jar解析文档?如果不是,那么当XML文档作为字符串检索时,检索将会打到XMLParseException

最好的解决方法是使用getstringval()方法XMLAGG以字符串形式检索值。

因此,更新后的查询字符串将类似于如下:

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/[email protected]: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();} 
    } 
} 

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

下面的示例程序在我结束工作得很好

相关问题