Данные объекта Clob равны нулю - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть строка из более чем 5000 символов, которую я хочу сохранить как XMLTYPE с MyBatis.Для этого я делаю следующее:

конвертируем строку в CLOB и используем ее для сохранения в базе данных с помощью конструктора: XMLTYPE.CREATEXML.

У меня проблема при конвертации строкив CLOB.

Если я сделаю это первым способом, созданный объект CLOB будет SerialClob и имеет 3 поля: BUF, LENG и CLOB;но из этих трех полей заполнены только два: BUF (буфер) и LENG, но CLOB имеет значение null.

Но если я сделаю это вторым способом, я создам полный объект CLOB со всей строкой, иУ меня нет проблем с сохранением в базе данных.Но первым способом я создаю SerialClob, который не позволяет сохранить его в XMLTYPE.

Я не могу использовать конструктор XMLTYPE с VARCHARS, потому что моя строка содержит более 4000 символов.

Есть ли альтернатива без необходимости открывать соединение?

 Clob myClobFile;
    String str = "<myString example></end of example>";

Первый способ:

try
{
   myClobFile=  new javax.sql.rowset.serial.SerialClob (str.toCharArray ());
}

Второй способ:

try
{
    myClobFile= sqlSession.getConnection ().createClob ();
    myClobFile.setString (1, str);
 }

1 Ответ

0 голосов
/ 24 января 2019

Я финансирую решение:

    public static Clob stringToClob (SqlSession sqlSession, String str) throws SQLException 
    {
            Clob myRet = null;

            try
            {
                myRet = sqlSession.getConnection ().createClob ();
                myRet.setString (1, str);
            }
            catch (SQLException e)
            {
                ...trows
            }
            return myRet;
    }

Я использовал это решение, потому что при отладке кода в разделе, где должен быть массив (в clob), это был пустой массив.Должна быть проблема при попытке отформатировать массив битов и затем передать этот объект mybatis.

...