com.supermap.data

类 Recordset.BatchEditor

  • java.lang.Object
    • com.supermap.data.Recordset.BatchEditor
  • 封闭类:
    Recordset


    public class Recordset.BatchEditor
    extends java.lang.Object
    该类作为 Recordset 类的内部类,主要提供记录的批量更新的功能。

    支持添加、删除和修改。

    纯属性数据集不支持批量更新。

    Example:
    以下代码示范如何实现用批量更新进行数据集中几何对象和字段值的添加。
     public void recordBatchTest() {
            // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
            // 从中取出名为“World”的矢量数据集 dataset_world
            DatasetVector dataset_world = (DatasetVector) datasets.get("World");
            
            // 通过模板 dataset_world 创建名为“example”的矢量数据集 dataset
            String name = "example";
            DatasetVector dataset = (DatasetVector)datasets.createFromTemplate(name, dataset_world);
            
            //获取记录集
            Recordset recordset_world = dataset_world.getRecordset(false, CursorType.STATIC);
            
            Recordset recordset = dataset.getRecordset(false, CursorType.DYNAMIC);
    
            // 获得记录集对应的批量更新对象
            BatchEditor editor = recordset.getBatch();
            
            // 设置批量更新每次提交的记录数目
            editor.setMaxRecordCount(50);
           
            // 从 World 数据集中读取几何对象和字段值,批量更新到 example 数据集中
            editor.begin();
            
            while (!recordset_world.isEOF()) {
                    Geometry geometry = recordset_world.getGeometry();
                            java.util.Map map = new java.util.HashMap();
                            
                            FieldInfos fieldInfos = recordset_world.getFieldInfos();
                            
                            for (int i = 0; i < fieldInfos.getCount(); i++) {
                                    FieldInfo fieldInfo = fieldInfos.get(i);
                                    if (!fieldInfo.getName().equalsIgnoreCase("SMID"))
                                            map.put(fieldInfo.getName(), recordset_world.getFieldValue(fieldInfo.getName()));
                            }
                            
                            recordset.addNew(geometry, map);
                            geometry.dispose();
                            recordset_world.moveNext();
                    }
    
            // 批量操作统一提交
            editor.update();
            
            // 释放记录集
            recordset_world.dispose();
            recordset.dispose();
        }
     
    • 方法概要

      所有方法 实例方法 具体方法 
      限定符和类型 方法和说明
      void begin()
      设置批量更新操作开始。
      int getMaxRecordCount()
      返回批量更新操作结果自动提交的最大记录数。
      void setMaxRecordCount(int value)
      设置批量更新操作结果提交的最大记录数,当所有需要更新的记录批量更新完成后,在提交更新结果时,如果更新的记录数超过了这个最大记录数时,系统将分批提交更新的结果,即每次提交最大记录数目个记录,直到所有的更新记录都提交完毕。
      void update()
      批量更新操作的统一提交。
      • 从类继承的方法 java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 方法详细资料

      • getMaxRecordCount

        public int getMaxRecordCount()
        返回批量更新操作结果自动提交的最大记录数。当进行批量更新操作的过程中,如果更新完成的记录数等于 MaxRecordCount 属性值,并且开始了下一条记录的更新操作,将自动提交已经完成更新的最大记录数的记录,例如,如果待更新的记录数为200,最大记录数设置为100,那么,在更新的过程中,更新完成的记录数等于100,并且开始了第101条记录的更新,就自动提交完成更新的100条记录,因此,在该实例中,将有1次自动提交的过程,而剩下的100条记录,由于没有第201条记录,因此只能调用 BatchEditor 类的 update() 方法,进行提交。另外,如果更新的记录数没有达到所设置的最大记录数,那么,需要调用 BatchEditor 类的 update() 方法,显式提交。用户可以在任何需要的时候调用 BatchEditor 类的 update() 方法显式提交所作的更新。

        注意:getMaxRecordCount() 方法的默认值为1024,setMaxRecordCount() 方法必须在调用 BatchEditor.begin() 方法前调用,否则会抛出异常。

        返回:
        批量更新操作结果提交的最大记录数。
      • setMaxRecordCount

        public void setMaxRecordCount(int value)
        设置批量更新操作结果提交的最大记录数,当所有需要更新的记录批量更新完成后,在提交更新结果时,如果更新的记录数超过了这个最大记录数时,系统将分批提交更新的结果,即每次提交最大记录数目个记录,直到所有的更新记录都提交完毕。例如,如果设定提交的最大记录数为1000,而需要更新的记录数为3800,那么批量更新记录后,在提交结果时,系统将分四次提交更新结果,即第一次提交1000条记录,第二次1000条,第三次1000条,第四次800条。
        参数:
        value - 批量更新操作结果提交的最大记录数。
      • begin

        public void begin()
        设置批量更新操作开始。

        此方法标识更新操作将以批量更新的方式进行,即,调用此方法后的更新操作不是立即生效,而是要等到调用 update() 方法后统一进行更新。

        注意:调用此方法之后,对记录集的更改也需要调用 update() 方法来进行提交,但是此时的更新值并不会写入结果,待所有更新提交完成后,调用 update() 方法更新值才会被记入结果。

      • update

        public void update()
        批量更新操作的统一提交。

        调用该方法后,之前进行的批量更新操作才会生效,同时更新状态将变为单条更新,如果需要之后的操作批量进行,还需再次调用 BatchEditor.begin() 方法。