一、问题描述:
在项目中使用到了DM数据库连接,查询某些数据,然后以Map形式返回时TEXT类型是会出现一些问题,默认会转换为dm.jdbc.driver.DmdbNClob类型的对象,某些情况下(不知道具体原因)在JSONObject.fromObject()里会导致循环依赖报错。

二、解决方案
1.我们可以在进行sql查询时就做一下转化。
原sql示例:

select text_col from dm_table;

这里查出来对应java中DmdbNClob类型的对象。

转换后的sql示例:

select convert(varchar, text_col ) AS text_col FROM dm_table;

这样查出来得就是字符串类型了。

2.如果是像select * from 查询,那么我们可以在配置数据源连接时设置下url的参数,如下:
url: jdbc:dm://192.168.5.125:5236?clobAsString=1

3.我们也可以在应用层对这种类型的数据特殊处理,如下:

Lis<Map<String,Object>> list = getDmData();for(Map<String,Object> map : list){Map<String, String> finalMap = new LinkedHashMap<>();map.entrySet().stream().forEachOrdered(e -> {if (e.getValue instanceof DmdbNClob){DmdbNClob col = (DmdbNClob ) e.getValue;finalMap.put(e.getKey(), col.data);}else {finalMap.put(e.getKey(), e.getValue());}}

这样就转换好了。

其中col.data可以通过源码就知道了。

进入DmdbClob类

其中有个data字段,就是我们要获取到的字符串。