Преобразование строки в Clob в Java

У меня есть ситуация, когда мне нужно сделать объект Clob из String. Проблема в том, что я не могу иметь ConnectionManager в этом методе.

Мне нужна какая-то утилита, например

 public Clob getClob(String data){

 }

Может ли кто-нибудь сказать мне, как я могу это сделать.

У меня также есть orce.sql.CLOB. однако для создания объекта требуется Connection.


person Reddy    schedule 11.07.2012    source источник
comment
Почему [у вас] не может быть ConnectionManager? Не могли бы вы использовать LobCreator ?   -  person radimpe    schedule 11.07.2012


Ответы (8)


Попробуй это :

OracleConnection conn;  // initialize this first

CLOB clob = conn.createClob();

public Clob getClob(String data){

    return clob.setString(position, data);
}
person vikiiii    schedule 11.07.2012

Те, кто все еще ищет альтернативный ответ, могут создать объект Clob без необходимости в объекте подключения, как показано ниже.

Clob myClob = new javax.sql.rowset.serial.SerialClob(stringData.toCharArray());
person Nibin Jacob Panicker    schedule 27.02.2018
comment
Именно то, что я ищу ;-) - person jumping_monkey; 21.10.2019
comment
В моем случае я вернул clob из сохраненной функции Java, но получил эту ошибку - ORA-00932: несовместимые типы данных: ожидалось возвращаемое значение, которое является экземпляром определенного пользователем конвертируемого класса Java. к типу Oracle получил объект, который не удалось преобразовать - person Erfan Ahmed; 06.01.2020

Выдает предупреждение: Clob не инициализирован.

Вам нужен OracleConnection для создания Clob с использованием базы данных Oracle.

OracleConnection conn;  // initialize this first

Clob myClob = conn.createClob();



private OracleConnection conn = null;
public void setConnection( OracleConnection conn )
{
    this.conn = conn;
}

void setClob( String cookie ) throws SQLException
{
    Clob myClob = conn.createClob();
    myClob.setString( 1, cookie);
}
person Mike    schedule 14.12.2012

Чтобы инициализировать OracleConnection, упомянутый в других ответах здесь, и если вы делаете это для хранимой процедуры java, а соединение связано с базой данных, в которой хранится процедура, то соединение можно инициализировать следующим образом:

Connection conn = DriverManager.getConnection("jdbc:default:connection:");

и этот импорт необходим:

import oracle.jdbc.driver.OracleConnection;
person eby    schedule 25.07.2018

Если вы используете весеннюю загрузку и у вас есть только объект JdbcTemplate, вы можете получить соединение с Oracle, используя:

private JdbcTemplate  jdbcTemplate;   // or NamedParameterJdbcTemplate 
Clob myClob = this.jdbcTemplate.getJdbcTemplate().getDataSource().getConnection().createClob();
person DS.    schedule 10.02.2020

Если вы ищете возможность создать [N]Clob без подключения, вы можете использовать NonContextualLobCreator из проекта Hibernate. В следующем примере показано создание NCLob с использованием строки

String xml = "my blob content";
NClob clob = NonContextualLobCreator.INSTANCE.createNClob(xml);
entity.setXmlclob);

Доступен как минимум с Hibernate 4.2 (может быть и раньше).

person bish    schedule 24.11.2019

Со своей стороны я использую

Clob generateProxy(String string)

Из

import org.hibernate.engine.jdbc.ClobProxy;
person Greg7000    schedule 29.01.2020

У меня была похожая проблема, когда мне нужно было сохранить JSON в поле. Вам не нужно использовать BLOB или CLOB в качестве объекта Java, но вы можете сохранить его как один.

чтобы завершить мой ответ, если вы используете базу данных ORACLE (которая является базой данных, которая всегда вызывает проблемы при разговоре на ее языке), используйте приведенный ниже формат в качестве руководства или передовой практики , который основан на самой документации оракула, чтобы решить вашу проблему:

@Lob @Basic(fetch=LAZY)
@Column(name="REPORT")
protected String report;

Как видите, переменная, которую вы используете для обработки данных, находится в строке (преобразование не требуется), но она будет храниться как большой объект.

Удачи!

person Aramis NSR    schedule 28.03.2021