org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column 'FIELD' from result set. Cause: java.sql.SQLException: ORA-17004: 列类型无效: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor ; uncategorized SQLException; SQL state [99999]; error code [17004]; ORA-17004: 列类型无效: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor; nested exception is java.sql.SQLException: ORA-17004: 列类型无效: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor
时间: 2024-03-11 07:51:36 浏览: 375
这个异常是由于Oracle JDBC驱动程序不支持使用getCLOB方法获取long类型字段值,而你在结果集中使用该方法获取long类型字段的值,导致了这个异常。
解决这个问题的方法是使用getAsciiStream或getCharacterStream方法获取long字段的值。这两个方法返回一个InputStream或Reader对象,你可以使用这些对象从结果集中读取long字段的值。
例如,如果你的long字段名为FIELD,可以使用以下代码获取该字段的值:
```
String field = null;
try {
InputStream is = resultSet.getAsciiStream("FIELD");
if (is != null) {
byte[] bytes = new byte[is.available()];
is.read(bytes);
field = new String(bytes);
}
} catch (IOException e) {
// handle exception
}
```
这里通过getAsciiStream方法获取了long字段的值,并将其转换为字符串。
另外,在使用MyBatis查询Oracle数据库时,可以在mapper文件中使用<![CDATA[...]]>将SQL语句包裹起来,以避免出现类似getCLOB not implemented的错误。例如:
```
<select id="getLongField" resultType="java.lang.String">
<![CDATA[
SELECT TO_CLOB(FIELD) AS FIELD FROM TABLE
]]>
</select>
```
这里使用了TO_CLOB函数将long类型字段转换为CLOB类型,避免了getCLOB not implemented的错误。
阅读全文