用最新DB2 JDBC TYPE4 连接数据库,对XML字段进行读写操作时报以下错误:com.ibm.db2.jcc.a.SqlException: [jcc][10375][11942][4.0.100] 操作无效:DB2Xml 不可读/写。 ERRORCODE=-4475, SQLSTATE=null
错误代码片断:
- PreparedStatement stmt=connection.prepareStatement("SELECT * FROM CATALOGTOM WHERE catalogId=?");
- stmt.setInt(1, 1);
- ResultSet rs=stmt.executeQuery();
- rs.next();
- SQLXML sqlXML=rs.getSQLXML("catalog");
- System.out.println(sqlXML.getString());
- java.io.InputStream binaryStream = sqlXML.getBinaryStream() //此行产生错误
原因从sun那里得到答案,原来SQLXML只在未释放之前只允许读写一次(http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/java/sql/SQLXML.html);
从 SQLXML 对象读取和向 SQLXML 对象写入 XML 值最多可以发生一次。可读和不可读(概念上的状态)确定一个读取 API 将返回一个值还是抛出一个异常。可写和不可写(概念上的状态)确定一个写入 API 将设置一个值还是抛出一个异常。
在调用 free() 或以下任一读取 API 后,状态从可读转为不可读:getBinaryStream()、getCharacterStream()、getSource() 和 getString()。在这种情况下,实现也可以将状态更改为不可写。
在调用 free() 或以下任一写入 API 后,状态从可写状态转为不可写状态:setBinaryStream()、setCharacterStream()、setResult() 和 setString()。在这种情况下,实现也可以将状态更改为不可读。
如果 JDBC 驱动程序支持该数据类型,则必须完全实现 SQLXML
接口中的所有方法。