首页 > 解决方案 > Clob 对象数据为空

问题描述

我有一个超过 5000 个字符的字符串,我想用 MyBatis 将其保存为 XMLTYPE。为此,我执行以下操作:

将 String 转换为 CLOB,CLOB 使用它通过构造函数将其保存在数据库中:XMLTYPE.CREATEXML。

将字符串转换为 CLOB 时出现问题。

如果我按照第一种方式创建,则创建的 CLOB 对象是 SerialClob,它有 3 个字段:BUF、LENG 和 CLOB;但是这三个字段中只有两个被填充:BUF(缓冲区)和 LENG,但 CLOB 为空。

但是,如果我以第二种方式执行此操作,我将创建完整的 CLOB 对象,其中包含所有字符串,并且将其保存在数据库中没有问题。但我创建的第一种方法是 SerialClob,它不允许将其保存在 XMLTYPE 中。

我不能将 XMLTYPE 构造函数与 VARCHARS 一起使用,因为我的 String 有超过 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);
 }

标签: javaspringmybatisclobspring-mybatis

解决方案


我资助了一个解决方案:

    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 中)的部分中,它是一个空数组。尝试将位数组格式化成clob,然后把这个对象传给mybatis的时候肯定有问题。


推荐阅读