我有一个超过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);
}
答案 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时肯定有问题。