我一直在尝试通过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
。
如果有人遇到类似问题并解决了,请告诉我解决方案。
感谢
元帅
答案 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();}
}
}