首页 / 浏览问题 / 组件GIS / 问题详情
iObjectsjava操作oracle数据库
16EXP 2017年03月06日
通过iDesktop 在oracle数据库中创建线状数据以后,能否通过iObjects java中的api直接给这个表中添加数据么?

1个回答

可以添加线数据,如果已经通过idesktop创建了oracle数据源且创建了线数据集,那么用java组件首先需打开这个数据源获取到该线数据集,设置好数据源连接信息即可打开,如:

// 设置 Oracle 数据源连接所需要的参数
            datasourceconnection.setEngineType(EngineType.ORACLEPLUS);
            datasourceconnection.setServer("Server");
            datasourceconnection.setDatabase("Database");
            datasourceconnection.setUser("User");
            datasourceconnection.setPassword("Java");
            datasourceconnection.setAlias("ORACLE");
然后获取到该线数据集,其次获取到记录集集合进行添加线数据的操作即可,示例代码如下:
 public void recordsetTest()
 {
        // 从中取出名为“World”(面数据集)的矢量数据集 dataset_world,和名为“Example”(面数据集)的矢量数据集 dataset
        DatasetVector dataset_world = (DatasetVector) datasource.getDatasets().get("World");
        DatasetVector dataset = (DatasetVector) datasource.getDatasets().get("Example");

        // 得到“Example”对应的所有记录集以及“World”中 SmID=1 的记录
        Recordset recordset = dataset.getRecordset(false, CursorType.DYNAMIC);
        Recordset recordset_world = dataset_world.query("SmID=1",CursorType.STATIC);
        // 将“World”中 SmID=1 的记录添加到 recordset 中并提交
        Geometry geometry = recordset_world.getGeometry();
        recordset.addNew(geometry);
        recordset.update();

        // 关闭记录集,释放几何对象、记录集
        recordset.close();
        geometry.dispose();
        recordset.dispose();
        recordset_world.dispose();
    }
 具体接口的描述,请查看联机帮助文档说明。
 
杨兵
1
1,430EXP 2017年03月07日
谢谢,你的回复很全面,我还有个问题,就是对于面数据在获取SMGEOMETRY这一列数据时用

String value = recordset.getFieldValue(i).toString();这条语句会报空指针异常,你知道这种情况么?

用这条语句在输出空值时需要怎么处理?

1.是获取SMGEOMETRY字段的值吗?首先看看这个字段存储的值是什么类型的,二进制,还是文本型?根据其类型选择获取值得函数,如getDouble(java.lang.String name)//用于返回数据集的属性数据表中当前记录为“双精度”类型字段的值。//

2.其次调试,检查recordset对象是否为空,获取的字段值是否为空。

1.我用plsql查看 SMGEOMETRY 的类型是LONG RAW 我该用什么解析

2.如果属性列有的行为空有的行不为空,当它为空的时候我用 recordset.getFieldValue(i)

这条语句获取的时候会报空指针异常,当我用try catch来获取的时候,有空值的列都会没有输出值。

SMGEOMETRY 存储的是几何对象,是二进制形式的,不建议这样去获取它,如果需要几何对象,可以先定位到该记录recordset,通过函数getGeometry()获取到。

报空指针是因为recordset是记录集几何,需要定位到某一条recordset再获取字段值,建议看看联机帮助文档关于recordset的描述,更好的理解及使用接口。

如果我想输出该几何的文本描述需要调用什么接口,使用getGeometry()获取的是geometry对象,如果我想拿到这个对象的string描述该用什么函数

可以转换为xml文件,geometry.toXML()。

...