Clob对象数据为空

时间:2018-12-26 08:45:35

标签: java spring mybatis clob spring-mybatis

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

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

将String转换为CLOB时遇到问题。

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

但是,如果我以第二种方式进行操作,则会创建带有所有String的完整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);
 }

1 个答案:

答案 0 :(得分:0)

我资助了一个解决方案:

    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时肯定有问题。