首页 / 浏览问题 / 组件GIS / 问题详情
DatasetVector.append()追加数据返回false?
1EXP 2023年04月10日
空间数据库:postgres DatasetVector.append();本地测试返回true. 线上返回false. 咨询如何能排查问题?

线上代码:

//将shp文件导入内存型数据源

//打开内存型数据源

Datasource momeryDatasource = dataManager.openMomeryDatasource();

Dataset tempDt = gisImport.editImportByShp(shpFile.getPath(),momeryDatasource);

//写入空间库

DatasetVector tempDsv = (DatasetVector) tempDt;

if (tempDsv == null) { System.out.println(shpFile.getName() + "数据集为空"); return null; }

Recordset recordsetTemp = tempDsv.getRecordset(false, CursorType.DYNAMIC);

//shp数据导入到空间表

boolean append = realDsv.append(recordsetTemp);

1个回答

您好,根据您的描述以及上述代码目前无法准确的判断出向数据集中追加记录集失败的原因,建议可以从以下方向进行排查:

  1. 检查 realDsv 数据集是否是以独占模式打开;
  2. 检查 recordsetTemp 记录集是否真的有记录,记录数量是否为 0;
  3. 尝试获取 realDsv 数据集对应的记录集,从 recordsetTemp 记录集中逐一获取记录向 realDsv 数据集对应的记录集添加记录,看看能否添加成功;
  4. 检查 iObjects Java 组件在添加记录集失败时是否有异常日志输出,若有异常日志,建议根据异常日志信息进一步排查失败原因。

希望可以帮到您。

2,253EXP 2023年04月10日

您好,根据您提供的四点排查:

1.

openDatasource没有找到独占模式的设置.realDsv不是只读
DatasourceConnectionInfo dsConInfo = new DatasourceConnectionInfo();
dsConInfo.setEngineType(EngineType.PGGIS);
dsConInfo.setServer(workspaceServer);
dsConInfo.setDatabase(dataBase);
dsConInfo.setUser(uesr);
dsConInfo.setPassword(password);
dsConInfo.setAlias("qjdc");

2.日志输出recordsetTemp有记录.数量量3000+

3.recordsetTemp逐一获取添加记录.不用append()数据量少的时候可以写入. 多个表总数据量10000+.会超时.

4.日志错误信息[error] FEHLER:  Geometry SRID (0) does not match column SRID (104995)
CONTEXT:  COPY st_ghyx_dwx_xz, Zeile 1, Spalte smgeometry

[error] FEHLER:  Relation »public.raster_columns« existiert nicht
LINE 1: SELECT count(*) FROM public.raster_columns LEFT JOIN public....

最终解决方案:客户目前使用的是 iObjects Java 10.0.1 组件版本,该功能在 iObjects Java 10.2.1 版本已优化,升级到 10.2.1 版本可正常使用。
...