我试图使用JDBC从Oracle表中提取XMLTYPE列并遇到一些问题

时间:2014-08-26 21:05:10

标签: java sql oracle jdbc xmltype

我正在尝试使用JDBC从Oracle表中提取XMLTYPE列 我有查询:

    select "XML_FILE" FROM "TABLE_NAME"

当我在Oracle SQL Developer中运行查询时,它会完全返回所有XMLTYPE行。

但是,当我运行以下Java代码并运行相同的查询时,我总是会为每列返回“null”。我不确定会出现什么问题,我尝试过做很多不同的事情,但一切都没有奏效。重要提示 - 每个XMLTYPE字段都有一个XML文件,最多包含60,000行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+"\'");
}   

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

http://kodehelp.com/how-to-read-xmltype-column-from-database-using-jdbc/

答案 1 :(得分:0)

你的意思是你对result.toString()的调用返回null?如果是这样,那不是你如何从结果集中获取数据。我尝试了几个不同的测试,使用DataDirect Oracle JDBC驱动程序,只从result.toString()得到null。如果我为XMLType列调用rs.getString(),我将获得插入的XML数据;调用getObject()返回到引用数据的LOB定位器(我认为,没有经过仔细检查)。没有给我数据的打印,只是定位器的ID。

答案 2 :(得分:0)

必须在查询中使用to_clob 选择

to_clob(xmlelement ( "employee", 'Bob' ))  ) as SQLXMLCOL1 from dual 

然后使用toString()

中的resultSet