2016-11-28 16 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"; 

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

相關問題