首页 / 浏览问题 / 组件GIS / 问题详情
iObjects.Java如何检测打开排他数据集时是否成功
251EXP 2023年09月08日
使用iObjects.Java实现了一个拓展服务

这个服务可以往里面的数据集中插入数据,然后根据这些数据进行基于森林的分类预测

整个功能已经实现,现在发现的问题是,为了往数据集中写入数据,数据源是使用排他方式打开的

如果我在iDesktopX里打开了这个工作空间,我的拓展服务就无法往内部写入数据

我的代码里写了if (isOpen) ,然后在进入后使用addNew添加属性数据(geometry都是null)

请问iObjects.Java有没有什么办法能够检查目标数据源(数据集)是否正在被占用或者添加数据是否成功?

如果有,请问应该如何在并发的时候检查是否被占用?

追记:在iDesktopX里打开对应数据集的情况下,把addNew后面的recordset.update()改为

System.out.println("add Data1 " + recordset.update());

之后,在控制台里显示都是true

但在iDesktop里刷新查看的时候条数还是和以前一样

1个回答

您好,1.可以使用Datasource.isReadOnly()方法判断数据源是否被只读方式打开,该方法返回数据源是否以只读的方式打开,

2.可以用Dataset.iisopensReadOnly方法用于检查数据集是否只读打开,

3.Dataset.isOpen()方法,返回当前数据集是否已经打开,如果数据集已经打开,则在已打开地方编辑数据据,不应该在其他地方编辑数据据,

4.如果是在iDesktopX里打开了这个工作空间后,拓展服务还要往内部写入数据,建议iDexktopX以只读方式打开数据源

5.如果生产环境需要多线程编辑,建议使用数据库型数据源
3,420EXP 2023年09月08日
感谢解答,使用postgresql型数据源的话

请问添加数据用我们iObjects的方法去添加的场合,能否支持我上面提到的多线程的情况

如果不能的话,是否得改成使用sql语句去添加数据?
使用postgresql数据源是支持多线程编辑的,注意要使用postgresql 9.6及以上版本
感谢解答,已测试过,确实可以
...