Javax.sql.rowset.serial.SerialClob нельзя привести к oracle.sql.CLOB при использовании подготовленногоStatement.setClobJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Javax.sql.rowset.serial.SerialClob нельзя привести к oracle.sql.CLOB при использовании подготовленногоStatement.setClob

Сообщение Anonymous »

Я пытаюсь вставить java.sql.Clob в таблицу Oracle DB со столбцом clob, но это не удается из-за следующего исключения

Код: Выделить всё

javax.sql.rowset.serial.SerialClob cannot be cast to oracle.sql.CLOB
at oracle.jdbc.driver.OraclePreparedStatement.setClob(OraclePreparedStatement.java:6558)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setClob(OraclePreparedStatementWrapper.java:165)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:118)
at com.sun.proxy.$Proxy7.setClob(Unknown Source)
at com.ieml.basedata.sheet.DMLStatement.executeWithKeys(DMLStatement.java:106)
at com.ieml.basedata.sheet.DMLStatement.execute(DMLStatement.java:26)
at com.ieml.sheets.lib.IssueArticles$2.doFunction(IssueArticles.java:268)
at com.ieml.basedata.sheet.SheetServlet.performFunction(SheetServlet.java:271)
at com.ieml.basedata.sheet.SheetServlet.doPost(SheetServlet.java:106)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.filters.ExpiresFilter.doFilter(ExpiresFilter.java:1227)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.ieml.filters.LogFilter.doFilter(LogFilter.java:34)
Версия Oracle – 21c, ojdbc8 jar java 8.(jdk 8 202).
Вот рассматриваемый код

Код: Выделить всё

java.sql.Clob dataClob=null;
....
dataClob =  (java.sql.Clob)new javax.sql.rowset.serial.SerialClob((data.get(changedColumns[k])).toString().toCharArray());
st.setClob(j, dataClob); //problematic line;
Раньше код, который я пытаюсь изменить, использовал старые, ныне устаревшие классы oracle.sql.CLOB, но он был написан для поддержки устаревшей версии Oracle 10g. Я надеялся избавиться от них, используя стандартные классы JDBC java.sql. Изучив это, я обнаружил следующее:
https://support.oracle.com/knowledge/Mi ... 807_1.html
это похоже на мою проблему, но, к сожалению, у меня нет доступа к поддержке Oracle, поэтому я не смог найти решение

Java.lang.ClassCastException: Javax.sql.rowset.serial.SerialClob
Невозможно привести к Oracle.sql.CLOB Сообщается при передаче объекта
SerialClob в качестве параметра в методе setClob оператора
(ID документа 2024807.1) Последнее обновление: 20 ФЕВРАЛЯ 2025 г.
Применимо к: JDBC - Версия 11.2.0.4.0 и более поздние версии. Информация в этом
документе применима к любой платформе. Признаки При попытке вставить
Clob в базу данных с помощью следующего кода и JDBC 11.2.0.4:

Мне удалось полностью избежать setClob с помощью setCharacterStream, используя этот код

Код: Выделить всё

String data_str=(data.get(changedColumns[k])).toString();
try(InputStream in = new ByteArrayInputStream(data_str.getBytes(StandardCharsets.UTF_8));
InputStreamReader reader = new InputStreamReader(in))
{
st.setCharacterStream(j, reader,data_str.length());
}
но мне было интересно, есть ли у кого-нибудь идеи, почему setClob вообще не работает с исключением. Есть идеи?


Подробнее здесь: https://stackoverflow.com/questions/797 ... hile-using
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»