我正在尝试使用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+"\'");
}
非常感谢任何帮助。谢谢!
答案 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