Java 我试图使用JDBC从Oracle表中提取一个XMLTYPE列,但遇到了一些问题

Java 我试图使用JDBC从Oracle表中提取一个XMLTYPE列,但遇到了一些问题,java,sql,oracle,jdbc,xmltype,Java,Sql,Oracle,Jdbc,Xmltype,我正在尝试使用JDBC从Oracle表中提取XMLTYPE列。 我有一个疑问: select "XML_FILE" FROM "TABLE_NAME" 当我在OracleSQLDeveloper中运行查询时,它完全可以返回所有XMLTYPE行 但是,当我运行下面的Java代码并运行相同的查询时,我总是为每一列返回“null”。我不确定会出什么问题,我试过做很多不同的事情,但都没有效果。重要注意事项-XMLTYPE字段每个都有一个XML文件,其中最多包含60000行XML 我正在使用的J

我正在尝试使用JDBC从Oracle表中提取XMLTYPE列。
我有一个疑问:

    select "XML_FILE" FROM "TABLE_NAME"
当我在OracleSQLDeveloper中运行查询时,它完全可以返回所有XMLTYPE行

但是,当我运行下面的Java代码并运行相同的查询时,我总是为每一列返回“null”。我不确定会出什么问题,我试过做很多不同的事情,但都没有效果。重要注意事项-XMLTYPE字段每个都有一个XML文件,其中最多包含60000行XML

我正在使用的Java代码:

String query = "select \"XML_FILE\" FROM \"TABLE_NAME\"";
//creating PreparedStatement object to execute query
PreparedStatement preStatement = null;
try {
   System.out.println("QUERY: "+query);
   preStatement = con.prepareStatement(query);   //con is the Connection obj
} catch (SQLException e) {
   e.printStackTrace();  
}

ResultSet result = null;
try {
   result = preStatement.executeQuery();
} catch (SQLException e) {
   e.printStackTrace();  
}
System.out.println("RESULT SET: "+result.toString());
String dataResult = "";
while(result.next()){
   for(int i=1; i<=numCols; i++){
      dataResult += result.getObject(i)+"\t";
      //dataResult += result.getString(i)+"\t";
   }
   dataResult+="\n";
   System.out.println("RESULT: \'"+dataResult+"\'");
}   
String query=“从“表名”中选择“XML文件”;
//创建PreparedStatement对象以执行查询
PreparedStatement预声明=null;
试一试{
System.out.println(“查询:+QUERY”);
preStatement=con.prepareStatement(query);//con是连接对象
}捕获(SQLE异常){
e、 printStackTrace();
}
ResultSet result=null;
试一试{
结果=preStatement.executeQuery();
}捕获(SQLE异常){
e、 printStackTrace();
}
System.out.println(“结果集:+RESULT.toString());
字符串dataResult=“”;
while(result.next()){

对于(inti=1;i,由于varchar长度(4000字节)的限制,您无法将其作为字符串(varchar)检索。 选择它作为CLOB:

    String query = "SELECT TBL.XMLTYPECOLUMN.GETCLOBVAL() FROM TABLE TBL";
    rs = stmt.executeQuery(query);
    xmlClob = (Clob) rs.getClob(1);

您的意思是对result.toString()的调用返回null吗?如果是这样,那么从结果集中获取数据的方式就不是这样了。我尝试了两种不同的测试,使用DataDirect Oracle JDBC驱动程序,只从result.toString()中获取null。如果我调用rs.getString()对于XMLType列,我将获得插入的XML数据;调用getObject()将返回到引用数据的LOB定位器(我认为,没有进行双重检查)。打印时没有提供数据,只提供定位器的ID。

必须在查询中使用
来关闭
挑选


然后在
resultSet

中使用
toString()
,这似乎是可行的,但当我在Oracle中运行查询时,会出现错误“ORA-00906:缺少左括号”。你知道为什么会抛出该错误吗?你可以使用额外的括号来摆脱ORA-00906。来源:
to_clob(xmlelement ( "employee", 'Bob' ))  ) as SQLXMLCOL1 from dual