背景:博主这些数据主要是接收消息中间件来的,接收的RAW类型数据全都变成了String,如果直接存表可能会有长度不够的问题,所以需要这样处理,之前所以是在査的时候就这样处理主要是消息中间件发过来的时候就变成了String,但是是被强制转换的,数据就不对了,所以我需要在查询的时候就改成String。
mybatis.
在查询的时候将字段用 dbms_lob.substr()方法转String,在存储的时候用TO_CLOB方法插入
- select dbms_lob.substr(A)A FROM b; 返回的A是String类型的
- 在存储的时候使用 TO_CLOB(#{A}) 进行存储,下面是一个批量存储的例子
<insert id="saveSqlMonitor" parameterType="java.util.List">
insert into db_sql_monitor(BINDS_XML,OTHER_XML,ELAPSED_TIME,QUEUING_TIME)
<foreach collection="list" item="items" index="index" separator="union all">
select
TO_CLOB(#{items.BINDS_XML}),TO_CLOB(#{items.OTHER_XML}),#{items.ELAPSED_TIME},#{items.QUEUING_TIME} from dual
</foreach>
</insert>
jdbc方式存储
查询的时候和mybatis是一样的
Reader BINDS_XML = null;
try {
BINDS_XML = new StringReader(String.valueOf(map.get("BINDS_XML")));
preparedStatement.setClob(46,BINDS_XML);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (BINDS_XML!=null)
{
BINDS_XML.close();
}
}
Reader OTHER_XML = null;
try {
OTHER_XML = new StringReader(String.valueOf(map.get("OTHER_XML")));
preparedStatement.setClob(47,OTHER_XML);
//long l3 = System.currentTimeMillis();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (OTHER_XML!=null) {
OTHER_XML.close();
}
}```