首页 / 浏览问题 / 组件GIS / 问题详情
操作点数据集时addNew()方法参数类型异常
6EXP 2019年07月24日
ava.lang.IllegalArgumentException: value
参数的类型不正确
	at com.supermap.data.Recordset.addNew(Unknown Source)

使用产品:iobjectsjava-9.1.2、SuperMap iDesktop .NET 9D

数据类型:oracle11g

问题详细描述:

数据集字段类型已经核对很多遍了,找不到问题,晕crying

关于此异常有如下几点请教:

1、oracle表中字符串类型的字段为空值,在插入数据集时可否将map中value值设置为空字符串“”?

2、oracle表中number类型的字段,在数据集中对应可否为双精度?

3、oracle表中number、number(n)等类型的字段值为空,在插入数据集时可否将map中的value值设置为0?

2 个回答

您好,已经将字符串类型、日期类型、整形及浮点型归类处理空值,还是有报错。
6EXP 2019年07月24日
您好,你在使用这个方法是设置的参数是Geometry和字段信息是吗?报这个错误是因为参数设置不正确导致的,检查一下你设置的map对象是否正确,能否把你的代码贴出来。

争对你上诉所说的几点:

1.如果字段为空值,也允许设置为空值,可以在参数中不设置这个字段信息就可以

2.争对与Oracle数据源,你可以在桌面软件中查看这个字段的类型,如果不想你想要的,在912版本的桌面中是可以修改字段类型的

3.插入记录集是可以设置value值的,
9,127EXP 2019年07月24日
@Override
public boolean addGisInfos(String datasetName, List<Map<String, Object>> data) {
    LOGGER.info("###进入添加数据集方法~~~~~~············");
    if (data == null) {
        return true;
    }
    DatasetVector datasetVector = areaHelper.getDatasetVector(datasetName);

    Recordset recordset = datasetVector.getRecordset(true, CursorType.DYNAMIC);
    Recordset.BatchEditor batch = recordset.getBatch();
    batch.begin();
    boolean isSuccess = true;
    for (Map<String, Object> dataItem : data) {

        double x = Double.valueOf(dataItem.get("insured_x").toString());
        double y = Double.valueOf(dataItem.get("insured_y").toString());
        Point point = new Point(x, y);
        Point latLon = SuperMapCoordinateConvertImpl.smLL2MC(point);
        GeoPoint geoPoint = new GeoPoint(latLon.getLon(), latLon.getLat());
        LOGGER.info("###数据集开始添加数据~~~~~~"+dataItem);
##
        if (!recordset.addNew(geoPoint, dataItem)) {
            isSuccess = false;
        }
    }
    batch.update();
    areaHelper.closeRecordset(recordset);
    return isSuccess;
}

您好,其中data集合中存放的为LinkHashMap;

尝试在##号行,新建一个map集合,存入与data中相同的键值对,然后addNew(geoPoint,map)可以添加成功,但换成addNew(geoPoint,dataitem)后还是会报错。

您好,我们的参数是需要map对象的,你肯定是需要创建map集合来进行添加的,可以参考一下Recordset.BatchEditor这个类里面示范代码
您好,我在#号行也是新建的一个LinkHashMap呀,可以添加成功的。
LinkedHashMap 是HashMap的一个子类,是可以添加成功的。你现在添加失败的dataItem是什么对象?是属于Map的吗?你要根据我们帮助文档上api介绍,这个方法所需要的参数来构造,如果是需要map对象,就只能传map对象,传其他参数就会出错
是的,老师,dataItem也是LinkedHashMap类型。
您好,你把代码发全一点,看一下你的参数都是怎么设置的?可以私聊发给我哈,联系方式我私信你了
...