com.supermap.data

类 Datasource

  • java.lang.Object
    • com.supermap.data.InternalHandle
      • com.supermap.data.Datasource


  • public class Datasource
    extends com.supermap.data.InternalHandle

    数据源类。

    该类管理投影信息、数据源与数据库的连接信息和对其中的数据集的相关操作,如通过已有数据集复制生成新的数据集等。

    每个数据源对应一种数据引擎。SuperMap 产品中提供了多种数据源类型,分为文件型数据源、数据库型数据源和 Web 数据源。如 UDB 数据源属于文件型数据源; Oracle、SQL Server、MySQL、PostgreSQL 和 DB2 数据源属于数据库型数据源;OGC、GoogleMaps、超图云服务、REST 地图服务和天地图地图服务数据源属于 Web 数据源。

    当单个Geometry比较大时,MySQL数据库型数据源需要修改配置文件,因为MySQL会根据配置文件限制服务端接受的数据包大小,导致写入或更新失败。修改方法: 打开MySQL安装目录下的mysql.ini配置文件,根据Geometry数据大小设置合适的max_allowed_packet;若无法打开配置文件,也可以在MySQL命令行中设置:set global max_allowed_packet=?。完成配置后需要重启MySQL服务。

    数据源定义了一致的数据访问接口和规范。数据源的物理存储既可以是文件方式,也可以是数据库方式。区别不同存储方式的主要依据是其所采用的数据引擎类型:采用 UDB 引擎时,数据源以文件方式存储(*.udb,*.udd)——文件型数据源文件用.udb 文件存储空间数据,.udd 文件存储属性数据,采用空间数据库引擎时,数据源存储在指定的 DBMS 中。

    数据源对象通常作为工作空间中数据源集合中的一个元素。可以对数据源进行保存操作、对数据集进行复制操作。

    一个工作空间可以打开多个数据源,不同的数据源通过不同的别名(Alias)进行标识。

    其中值得一提的是我们假设数据源中的数据都使用同样的单位和空间参考系。

    通过 isConnected() 方法可以设置数据源是否自动连接,当选择自动连接的时候,在打开工作空间时,数据源会自动连接数据库中的数据。由于数据集默认是不打开的,所以如果要对数据集的数据进行修改或其他操作,可以通过 Dataset 类中提供的 open() 方法来实现打开数据集操作,否则数据集处于关闭状态。

    • 构造器详细资料

      • Datasource

        public Datasource(EngineType enginetype)
        根据指定的参数构造Datasource类的新实例。
        参数:
        enginetype - 引擎类型。
    • 方法详细资料

      • open

        public Dataset open(DatasourceConnectionInfo connectioninfo,
                            String strDtName)
        根据指定的数据源连接信息和数据集名称打开数据源获取数据集。
        参数:
        connectioninfo - 数据源连接信息。
        strDtName - 数据集名称。
        返回:
        数据集。
      • open

        public boolean open(DatasourceConnectionInfo connectioninfo)
        根据指定的数据源连接信息打开数据源。
        参数:
        connectioninfo - 数据源连接信息。
        返回:
        打开是否成功,成功返回true,失败返回false。
      • create

        public boolean create(DatasourceConnectionInfo connectioninfo)
        根据指定的数据源连接信息创建数据源。
        参数:
        connectioninfo - 数据源连接信息。
        返回:
        创建是否成功,成功返回true,失败返回false。
      • close

        public void close()
        关闭当前数据源。
      • getAlias

        public String getAlias()
        返回数据源的别名。别名用于在工作空间中唯一标识数据源,可以通过它访问数据源。数据源的别名在创建数据源或打开数据源时给定,打开同一个数据源可以使用不同的别名。
        返回:
        数据源的别名。
      • getConnectCheckInterval

        public static int getConnectCheckInterval()
        返回两次检测连接数据库时间间隔,以毫秒为单位。该返回值对 DatasourceDisconnectedEvent 事件有效。
        返回:
        两次检测连接数据库时间间隔,以毫秒为单位。
      • setConnectCheckInterval

        public static void setConnectCheckInterval(int interval)
        设置两次检测连接数据库时间间隔,以毫秒为单位。

        该值对 DatasourceDisconnectedEvent 事件有效。

        参数:
        interval - 两次检测连接数据库时间间隔,以毫秒为单位。
      • isConnected

        public boolean isConnected()
        判断数据源是否与数据库连接,非数据库型数据源此方法无效。

        如果数据源没有连接,可以通过调用 connect() 方法 来实现与数据库的连接。

        返回:
        此数据源是否已经连接。
      • isOpened

        public boolean isOpened()
        返回数据源是否打开的状态,如果数据源处于打开状态,返回 true,如果数据源被关闭,则返回 false。
        返回:
        一个布尔值,指示数据源是否为打开的状态。如果数据源处于打开状态,返回 true,否则返回 false。
      • isAutoConnect

        public boolean isAutoConnect()
        返回一个布尔值指定数据源是否自动连接数据库。
        返回:
        如果数据源自动连接数据库,返回 true,否则返回 false。
      • setAutoConnect

        public void setAutoConnect(boolean value)
        设置一个布尔值指定数据源是否自动自动连接数据库。
        参数:
        value - 一个布尔值指定是否自动连接。
      • getConnectionInfo

        public DatasourceConnectionInfo getConnectionInfo()
        返回此数据源的连接信息。数据源连结信息包括了进行数据源连接的所有信息,如所要连接的服务器名称,数据库名称、用户名、密码等。有关数据源连接信息属性的详细信息,请参考 DatasourceConnectionInfo 类。
        返回:
        此数据源的连接信息。
        另请参阅:
        DatasourceConnectionInfo
      • getDatasets

        public Datasets getDatasets()
        返回此数据源所包含的数据集的集合对象。该数据集集合提供对数据集的管理功能,如创建、删除、重命名等操作。

        一个数据源中所有的数据集对象都由一个数据集集合对象来管理。当数据源中存在多个 schema,可获取到多个 schema 下的数据集,同名数据集将采用 schema.datasetname 的形式进行区分。(多个 schema 的情况当前仅支持 PostGIS 和 YuKon 引擎)

        特别说明:PostGIS数据库中存在第三方来源的大小写不同的同名数据集时,引擎暂未对此场景做处理。

        返回:
        此数据源所包含的数据集的集合对象。
      • getDescription

        public String getDescription()
        返回用户添加的关于数据源的描述信息。用户可以在描述信息里加入你想加入的任何信息,例如建立数据源的人员、数据的来源、数据的主要内容、数据的精度、质量等信息,这些信息对于维护数据具有重要的意义。
        返回:
        用户添加的关于数据源的描述信息。
      • ReleaseIdleConn

        public int ReleaseIdleConn()
        主动释放空闲连接。
        返回:
        成功释放的连接个数。
      • setDescription

        public void setDescription(String value)
        设置用户添加的关于数据源的描述信息。用户可以在描述信息里加入你想加入的任何信息,例如建立数据源的人员、数据的来源、数据的主要内容、数据的精度、质量等信息,这些信息对于维护数据具有重要的意义。
        参数:
        value - 用户添加的关于数据源的描述信息。
      • getEngineType

        public EngineType getEngineType()
        返回此数据源的数据引擎类型。数据源引擎类型由创建数据源时选择的数据源引擎决定,数据源一旦建立,其引擎类型就不能被修改。现在提供的引擎类型有 UDB、OracelPlus、SQLPlus,详情请参见 EngineType 类型。
        返回:
        此数据源的数据引擎类型。
        另请参阅:
        EngineType
      • isModified

        public boolean isModified()
        返回此数据源是否有改动。true 表示数据源已改动,false 表示数据源还未改动。数据源负责管理数据集,因此当其中的数据集个数等内容发生改变时,此属性会返回 true。当数据源是以事务方式打开时,关闭数据源时可通过此属性判断是否需要提示用户保存修改内容。
        返回:
        此数据源是否有改动。
      • getPrjCoordSys

        public PrjCoordSys getPrjCoordSys()
        返回数据源的投影信息。
        返回:
        数据源的投影信息。
      • setPrjCoordSys

        public void setPrjCoordSys(PrjCoordSys value)
        设置数据源的投影信息。
        参数:
        value - 数据源的投影信息。
      • getCoordUnit

        public Unit getCoordUnit()
        返回数据源坐标单位。
        返回:
        数据源坐标单位。
      • setCoordUnit

        public void setCoordUnit(Unit value)
        设置数据源坐标单位。
        参数:
        value - 数据源坐标单位。
      • getDistanceUnit

        public Unit getDistanceUnit()
        返回数据源的距离单位。
        返回:
        数据源的距离单位。
      • setDistanceUnit

        public void setDistanceUnit(Unit value)
        设置数据源的距离单位。
        参数:
        value - 数据源的距离单位。
      • isReadOnly

        public boolean isReadOnly()
        返回数据源是否以只读方式打开。

        对文件型数据源,如果只读方式打开,就是共享的,可以打开多次;如果以非只读方式打开,则只能打开一次。

        如果以只读方式打开数据源,数据源的相关信息以及其中的数据都不可修改。即在数据源中不允许进行下列操作,例如:复制数据集(copyDataset()),创建内点数据集(innerPointToDataset()),根据关联表的坐标字段创建点数据集(fieldToPointDataset()),属性字段生成文本数据集(labelToTextDataset()),将记录集的内容生成矢量数据集(recordsetToDataset())。

        对于影像数据源(IMAGEPLUGINS 引擎类型)只会以只读方式打开。

        返回:
        数据源是否以只读方式打开。
      • isUnicodeSupported

        public boolean isUnicodeSupported()
        返回判断当前数据源是否支持 Unicode 数据存储,true 表示支持;false 表示不支持。SuperMap Objects Java 6R(2012) SP2 版本为非 Unicode 版本,该方法返回值为 false。
        返回:
        一个布尔值表示当前数据源是否支持 Unicode 数据存储,true 表示支持;false 表示不支持。
      • getWorkspace

        public Workspace getWorkspace()
        得到数据源所在的工作空间对象。
        返回:
        数据源所在的工作空间。
      • isCanConnect

        public boolean isCanConnect()
        用于连接数据源,连接成功返回 True;否则返回 False。
        返回:
        boolean
      • connect

        public boolean connect()
        用于连接数据源。连接成功返回 true,否则返回 false。

        可以通过 isConnected() 方法判断数据源与数据库是否连接。未连接时可以使用 connect() 方法重新连接。

        返回:
        连接数据源成功返回 true,否则返回 false。
      • copyDataset

        public Dataset copyDataset(Dataset srcDataset,
                                   String desDatasetName,
                                   EncodeType encodeType)
        用于在相同或不同引擎数据源中复制数据集。复制数据集之前必须保证当前数据源已经打开而且可写。复制数据集之前,可先调用 Datasets.isAvailableDatasetName() 方法来判断目标数据集的名称是否合法,并且目标数据集的名称不能使用数据库的关键字;复制数据集时,可通过 EncodeType 参数来对数据集的编码方式进行修改。有关数据集存储的编码方式请参见 EncodeType 枚举类型。

        由于CAD数据集不支持任何编码,对 CAD 数据集进行复制(copyDataset())操作时设置的 EncodeType 无效,即只能置为 NONE

        支持将ImagePlugin引擎数据源中的影像数据集到其它数据源中,也支持将其它数据源中的数据集复制到影像数据源

        从 ImagePlugin 打开的数据源中复制数据集到其他数据集无效,也不能向 ImagePlugin 数据源中复制数据集,因为这种引擎是只读的。

        PostGIS作为复制的目标数据源时,复制后字段名统一存为小写。

        参数:
        srcDataset - 要复制的源数据集。
        desDatasetName - 目标数据集的名称。
        encodeType - 数据集的编码方式。
        返回:
        复制得到的数据集。
        另请参阅:
        EncodeType
        示范代码:
        以下代码示范如何复制数据集。
         public void copyDatasetTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在两个数据源对象:datasource 和 datasource_Des
                // 在数据源 datasource 中取出名为“World”的数据集,将其复制到数据源 datasource_Des 下
                DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().
                                              get("World");
        
                // 返回一个可用的目标数据集的名称,复制数据集
                String datasetName = datasource_Des.getDatasets().
                                     getAvailableDatasetName("World_1");
                Dataset newDataset = datasource_Des.copyDataset(datasetVector,
                        datasetName, EncodeType.INT32);
            }
         
      • copyDataset

        public Dataset copyDataset(Dataset srcDataset,
                                   String desDatasetName,
                                   EncodeType encodeType,
                                   SteppedListener listener)
        复制数据集。
        参数:
        srcDataset - 复制的源数据集。
        desDatasetName - 目标数据集名称。
        encodeType - 编码方式。
        listener - 进度条事件监听器。
        返回:
        返回复制后的数据集对象。
      • copyDatasetWithSmID

        public Dataset copyDatasetWithSmID(Dataset srcDataset,
                                           String desDatasetName,
                                           EncodeType encodeType)
        复制数据集,保留SmID的值。不适用于OracleSpatial和SQLSpatial引擎。
        参数:
        srcDataset - 要复制的源数据集。
        desDatasetName - 目标数据集的名称。
        encodeType - 数据集的编码方式。
        返回:
        复制得到的数据集。
      • copyDatasetVectorWithPyramid

        public Dataset copyDatasetVectorWithPyramid(Dataset srcDataset,
                                                    String desDatasetName,
                                                    EncodeType encodeType)
        复制数据集,并将数据集带有的金字塔一起复制。
        参数:
        srcDataset - 源数据集。
        desDatasetName - 目标数据集名称。
        encodeType - 编码类型。
        返回:
        复制后的数据集对象。
      • copyWithSMIDIsCopyVectorPyd

        public Dataset copyWithSMIDIsCopyVectorPyd(Dataset srcDataset,
                                                   String desDatasetName,
                                                   EncodeType encodeType,
                                                   boolean bCopyVectorPyraimd)
        复制数据集,复制前后SmID保持一致,并可设置是否将数据集带有的金字塔一起复制。
        参数:
        srcDataset - 源数据集。
        desDatasetName - 目标数据集名称。
        encodeType - 编码方式。
        bCopyVectorPyraimd - 是否复制金字塔。
        返回:
        复制后的数据集对象。
      • copyDataset

        public Dataset copyDataset(Dataset srcDataset,
                                   String desDatasetName,
                                   EncodeType encodeType,
                                   Charset nCharset)
        根据指定的编码类型以及字符集类型复制数据集。该方法应用于把文本数据集或CAD数据集升级为支持多国语言的 UTF8 字符集时。SuperMap Objects .NET 6R(2012) SP2版本不支持该方法,预留后续版本使用。
        参数:
        srcDataset - 要复制的源数据集。
        desDatasetName - 目标数据集的名称。
        encodeType - 数据集的编码方式。
        nCharset - 数据集的字符集类型。
        返回:
        复制得到的数据集。
      • fieldToPointDataset

        public DatasetVector fieldToPointDataset(DatasetVector srcDataset,
                                                 String desDatasetName,
                                                 String fieldX,
                                                 String fieldY)
        从一个矢量数据集的属性表中的 X、Y 坐标字段创建点数据集。即以该矢量数据集的属性表中的 X 、Y 坐标字段作为数据集的 X、Y 坐标来创建点数据集。注意待创建的点数据集名称不能与数据源中已有的数据集重名。
        参数:
        srcDataset - 关联属性表中带有坐标字段的矢量数据集。
        desDatasetName - 待创建的点数据集的名称。
        fieldX - 表示点横坐标的字段。
        fieldY - 表示点纵坐标的字段。
        返回:
        新创建的点数据集。
        示范代码:
        以下代码示范如何从矢量数据集的字段创建点数据集,如何创建内点数据集,如何将字符型字段转换成文本数据集,如何将记录集的内容生成一个相应类型的矢量数据集。
         public void toDatasetTest() {
                // 假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象
                // 取出该数据源中的一个数据集{datasetVector},该数据集有两个名为 SQKM 和 SQMI 的 double 类型字段,以及名为 Capital 的 String 类型字段
                // 从 datasetVector 属性表的 SQKM、SQMI 字段创建点数据集
                DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().
                                              get("World");
                datasource.fieldToPointDataset(datasetVector,
                                               datasource.getDatasets().
                                               getAvailableDatasetName("point"), "SQKM",
                                               "SQMI");
        
                // Create the inner point dataset of datasetVector.
                datasource.innerPointToDataset(datasetVector,
                                               datasource.getDatasets().
                                               getAvailableDatasetName("innerPoint"));
        
                // Create a text dataset using the field "Capital" of datasetVector.
                datasource.labelToTextDataset(datasetVector,
                                              datasource.getDatasets().
                                              getAvailableDatasetName("text"),
                                              "Capital",
                                              new TextStyle());
        
                // Get the record where SmID>10. Converts the content of the recordset to the corresponding vector dataset.
                Recordset recordset = datasetVector
                                      .query("SmID>10", CursorType.STATIC);
                datasource.recordsetToDataset(recordset,
                                              datasource.getDatasets().
                                              getAvailableDatasetName("Record"));
                recordset.dispose();
            }
         
      • labelToTextDataset

        public DatasetVector labelToTextDataset(DatasetVector srcDataset,
                                                String desDatasetName,
                                                String textField,
                                                TextStyle textStyle)
        用于将数据集的属性字段生成一个文本数据集。通过此方法生成的文本数据集中的文本对象,均以其对应的空间对象的内点作为对应的锚点,对应的空间对象即当前文本对象的内容来源于相应空间对象的属性值。
        参数:
        srcDataset - 要转换属性的数据集,必须为矢量数据集。
        desDatasetName - 目标文本数据集名,此数据集存放于调用本方法的数据源中。
        textField - 要转换的属性字段的名称。
        textStyle - 文本数据集的风格。
        返回:
        一个文本数据集。
        另请参阅:
        Datasource.fieldToPointDataset(DatasetVector,String,String, String)
        示范代码:
        请参见 Datasource.fieldToPointDataset() 方法的示例。
      • query

        public Recordset query(String Strsql)
        使用SQL语句查询记录。
        参数:
        Strsql - SQL语句。
        返回:
        查询到的记录集对象。
      • queryDataset

        public DatasetVector queryDataset(String Strsql)
        使用SQL语句查询数据集。
        参数:
        Strsql - SQL语句。
        返回:
        查询到的数据集对象。
      • getVersionManager

        public VersionManager getVersionManager()
        获取数据源的版本管理类对象。
        返回:
        版本管理类对象。
      • getReplicaManager

        public ReplicaManager getReplicaManager()
        获取数据源的复本管理类对象。
        返回:
        复本管理类对象
      • setPrivilegeTypes

        public boolean setPrivilegeTypes(String roleOrUserName,
                                         DatasourcePrivilegeTypes privilegeTypes)
        设置某用户或角色对连接信息的数据源是否有管理数据集的权限,包括创建数据集、创建数据集分组。

        在SuperMap系统中只允许超级用户修改此权限。

        参数:
        roleOrUserName - 角色或用户名,传入的名称如果是超级用户,则返回失败,超级用户的权限不允许被修改
        privilegeTypes - 数据源权限类型
        返回:
        设置是否成功
        从以下版本开始:
        SuperMap iObjects Java 11.2.0。
      • getPrivilegeTypes

        public DatasourcePrivilegeTypes getPrivilegeTypes(String roleOrUserName)
        获取某用户或角色对连接信息的数据源是否有管理数据集的权限,包括创建数据集、创建数据集分组。

        在SuperMap系统中只允许超级用户修改此权限。

        参数:
        roleOrUserName - 角色或用户名
        返回:
        是否有管理数据集的权限
        从以下版本开始:
        SuperMap iObjects Java 11.2.0。
      • getAllPrivilegeTypes

        public HashMap<String,DatasourcePrivilegeTypes> getAllPrivilegeTypes()
        获取所有用户或角色对数据源的权限,包括创建数据集、创建数据集分组

        在SuperMap系统中只允许超级用户修改此权限。

        返回:
        是否有管理数据集的权限
        从以下版本开始:
        SuperMap iObjects Java 11.2.0。
      • hasPrivilegeGrant

        public boolean hasPrivilegeGrant()
        是否可修改用户的数据源权限,只有当前连接为超级用户才可以
        返回:
        是否有Grant权限
        从以下版本开始:
        SuperMap iObjects Java 11.2.0。
      • getCreateUser

        public String getCreateUser()
        获取数据源的创建用户
        返回:
        返回名称
        从以下版本开始:
        SuperMap iObjects Java 11.2.0。
      • getDomainManager

        public DomainManager getDomainManager()
        返回值域管理对象。
        返回:
        值域管理对象。
      • getAttributeRuleInfoManager

        public AttributeRuleInfoManager getAttributeRuleInfoManager()
        返回值属性规则信息管理对象
        返回:
        属性规则信息管理对象
      • changePassword

        public boolean changePassword(String oldPassword,
                                      String newPassword)
        修改已经打开的数据源的密码。

        只有在工作空间处于打开的状态下,才能修改密码,并且该方法只针对文件型的数据源。

        参数:
        oldPassword - 指定的旧的密码。
        newPassword - 指定的新的密码。
        返回:
        true 表示修改成功;false 表示修改失败。
      • createSequence

        public boolean createSequence(String sequenceName)
        根据给定的名称创建一个序列。该序列从 0 开始,无固定长度,以 1 作为步长自增长,最大值为 Int64 的最大值。
        参数:
        sequenceName - 指定的待创建序列的名称。
        返回:
        一个布尔值,用于指示创建序列是否成功,如果成功返回 true,否则返回 false。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • createSequence

        public boolean createSequence(String sequenceName,
                                      long startValue,
                                      long maxValue,
                                      int incrementValue)
        根据给定的参数创建序列,可以自定义序列长度和步长。
        参数:
        sequenceName - 指定的待创建序列的名称。
        startValue - 指定的序列的起始值。
        maxValue - 指定的序列的终止值。指定为 -1,表示采用 Int64 类型的最大值作为终止值。
        incrementValue - 指定的增长步长。
        返回:
        一个布尔值,用于指示创建序列是否成功,如果成功返回 true,否则返回 false。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • getSequenceNextValue

        public long getSequenceNextValue(String sequenceName)
        返回指定序列的下一个值。

        序列刚创建时,使用该方法获得的是序列的起始值。当序列被使用后,使用该方法可以获取到下一个将要被使用的序列值。注意,序列值是以该序列指定的步长来增长的。

        参数:
        sequenceName - 指定的序列名称。
        返回:
        序列的下一个值。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • deleteSequence

        public boolean deleteSequence(String sequenceName)
        删除指定名称的序列。
        参数:
        sequenceName - 指定的待删除序列的名称。
        返回:
        一个布尔值,用于指示删除序列是否成功,如果成功,返回 true,否则返回 false。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • isSequenceExist

        public boolean isSequenceExist(String sequenceName)
        判断指定的序列是否存在。
        参数:
        sequenceName - 指定的序列名称。
        返回:
        一个布尔值,用于指示序列是否存在,如果存在,返回 true,否则返回 false。
        从以下版本开始:
        SuperMap iObjects Java 7.0.0
      • executeSQL

        public boolean executeSQL(String sql)
        用于对数据库类型的数据源执行一个 SQL 语句。可以完成用户自定义的属性表查询。
        1. SQL 查询语句不能跨数据库执行;
        2. 该接口只负责执行查询语句,不对具体查询过程控制。不建议普通用户使用;
        3. 对于 SQLPlus 数据源,该方法可以一次执行多条 SQL 语句,在参数 sql 字符串中使用空格或回车分隔各 SQL 语句。不可使用分号。例如:

            strSQL = "CREATE TABLE T1 (Col1 int)
            INSERT INTO T1 (test)VALUES (10)";

          SQL 语句中可直接书写执行事务处理相关的语句而不需设置“以事务方式打开”;

        4. 对于 OraclePlus 数据源,该方法只能执行一条 SQL 语句。进行事务处理时,需在数据源打开时设置“以事务方式打开”;相关的事务处理语句(提交、回滚事务)必须在应用程序关闭之前进行。
        5. 注意:当前版本暂不支持事务的处理。

          参数:
          sql - 标准 SQL 查询语句.
          返回:
          一个 boolean 值,表示是否成功执行 SQL 语句。如果成功返回 true,否则返回 false。
        • refresh

          public void refresh()
          该方法用于对数据库类型的数据源进行刷新。
        • flush

          public boolean flush(String datasetName)
          用于将内存中暂未写入数据库中的数据保存到数据库。
          参数:
          datasetName - 需要刷新的数据集名称。当传入长度为空的字符串,表示对所有数据集进行刷新;否则对指定名字的数据集进行刷新。
          返回:
          一个布尔值,若保存成功返回 ture ,否则返回 false。
        • removeDisconnectedListener

          public void removeDisconnectedListener(DatasourceDisconnectedListener l)
          移除一个用于接收数据源断开连接结束事件(DatasourceDisconnectedEvent)的监听器。
          参数:
          l - 一个用于接收数据源断开连接结束事件的监听器。
        • addRefreshedListener

          public void addRefreshedListener(DatasourceRefreshedListener l)
          添加一个用于接收数据源刷新结束事件(DatasourceRefreshedEvent)的监听器。
          参数:
          l - 一个用于接收数据源刷新结束事件的监听器。
        • removeRefreshedListener

          public void removeRefreshedListener(DatasourceRefreshedListener l)
          移除一个用于接收数据源刷新结束事件(DatasourceRefreshedEvent)的监听器。
          参数:
          l - 一个用于接收数据源刷新结束事件的监听器。
        • addSteppedListener

          public void addSteppedListener(SteppedListener l)
          添加一个用于接收进度条事件(SteppedEvent)的监听器。
          参数:
          l - 一个用于接收进度条事件的监听器。
        • removeSteppedListener

          public void removeSteppedListener(SteppedListener l)
          移除一个用于接收进度条事件(SteppedListener)的监听器。
          参数:
          l - 一个用于接收进度条事件的监听器。
        • updateDataset

          public void updateDataset()
          对数据集进行更新操作。
        • getRootGroup

          public DatasetGroup getRootGroup()
          返回数据集分组的根组。
          返回:
          数据集分组的根组。
        • getDateLastUpdated

          public String getDateLastUpdated()
          获取数据源最后更新的时间。
          返回:
          最后更新的时间。
        • isFieldIndexNameExist

          public boolean isFieldIndexNameExist(String strIndexName,
                                               String strTableName)
          判断指定表名的指定索引名称是否存在。
          参数:
          strIndexName - 指定的索引名称。
          strTableName - 指定的表名。
          返回:
          true 表示存在;false 表示不存在。
        • getLockState

          public LockStateType getLockState()
          获取数据源的内存锁状态。
          返回:
          锁的状态。
        • setLockState

          public boolean setLockState(LockStateType lockType)
          数据源设置内存锁状态。
          参数:
          lockType - 锁的类型。 指定的索引名称。
          返回:
          一个布尔值,返回是否设置成功。
        • addRecordsetEditListener

          public void addRecordsetEditListener(DatasetVector relationship,
                                               RecordsetEditListener l)
          添加一个用于接收数据记录编辑事件(RecordsetEditListener)的监听器。
          参数:
          relationship - 矢量数据集对象。
          l - 一个用于接收数据记录编辑事件的监听器。
        • removeRecordsetEditListener

          public void removeRecordsetEditListener(DatasetVector relationship,
                                                  RecordsetEditListener l)
          移除一个用于接收数据记录编辑事件(RecordsetEditListener)的监听器。
          参数:
          relationship - 矢量数据集对象。
          l - 一个用于接收数据记录编辑事件的监听器。
        • getTransDatasource

          public Datasource getTransDatasource()
          获取事务轻量数据源,与主数据源共享连接池, 主数据源打开时会设置连接池最大连接数,最大连接数决定了连接池最多可以新建的数据库连接数,数据源事务开启时会独占一个连接, 所有的事务编辑操作都使用这一个连接,这会导致多用户并发编辑时出现排队的情况。轻量数据源可以很好的解决这个问题, 在web并发编辑时,每一个轻量数据源可以对应一个编辑用户,每个编辑用户的事务是隔离的, 需要注意的是开始事务的轻量数据源不建议超过最大连接数,避免出现等待或者开启事务失败的情况。 事务轻量数据源必须手动关闭,防止内存泄漏。
          返回:
          事务轻量数据源。
        • beginTrans

          public boolean beginTrans(boolean autoCommitWhileDDL,
                                    long timeOut)
          开启事务,一个数据源对象只支持开启一次事务。
          参数:
          autoCommitWhileDDL - 开启的事务遇到DDL时是否自动提交事务。这里的DDL包括新建字段、删除字段、修改字段类型、修改字段默认值、修改字段是否必填、修改字段名称、 修改字段长度、删除数据集。

          参数为true时,被当前事务锁住的数据集(参见DatasetTransStateType.CURRENT_TRANS_LOCK)需要DDL操作时, 会提交事务后先执行DDL语句,然后再开启一个新事务,之前的编辑操作提交到数据库。如果被其他事务锁住(参见DatasetTransStateType.OTHER_TRANS_LOCK)则不允许操作, 返回失败。没被任何事务锁住(参见DatasetTransStateType.NO_TRANS_STATE)则允许操作。

          参数为false时遇到被锁住的数据集(参见DatasetTransStateType.CURRENT_TRANS_LOCK,DatasetTransStateType.OTHER_TRANS_LOCK)需要DDL操作时,不允许操作, 直接返回失败,被当前事务和或其他事务锁住都返回失。没锁住的数据集(参见DatasetTransStateType.NO_TRANS_STATE)允许操作。事务不自动提交。

          timeOut - 指定的超时时间,单位毫秒,0表示永久不超时。 当连接池连接已被使用完,可能获取不到连接,将会等待timeOut毫秒,如果没有其他线程释放连接,那么就会开启事务失败,接口返回的失败。
          返回:
          是否开启成功。
        • commitTrans

          public boolean commitTrans(boolean forced)
          提交事务。
          参数:
          forced - 是否强制提交。

          true任何情况都强制提交,需要注意的是,强制提交后,当事务内查询的记录集未释放,则记录集状态发生错误,无法继续在后续的代码中使用。

          false事务内存在查出的记录集没释放完则不提交,否则提交。

          如果想获取哪些数据集查询了记录集还未释放,可以调用Datasource.getDatasetNamesInTrans()

          返回:
          是否提交成功。
        • rollbackTrans

          public boolean rollbackTrans(boolean forced)
          回滚事务
          参数:
          forced - 是否强制回滚。

          true任何情况都回滚,需要注意的是,强制回滚后,当事务内查询的记录集未释放,则记录集状态发生错误,无法继续在后续的代码中使用。

          false事务内存在查出的记录集没释放完则不回滚,否则回滚。

          如果想获取哪些数据集查询了记录集还未释放,可以调用Datasource.getDatasetNamesInTrans()

          返回:
          是否回滚成功。
        • getTransState

          public DatasourceTransStateType getTransState()
          获取数据源的事务状态。
          返回:
          数据源的事务状态。
        • getDatasetNamesInTrans

          public String[] getDatasetNamesInTrans()
          获取事务内有查询记录集存在的数据集名称数组。
          返回:
          事务内有查询记录集存在的数据集名称数组。

          如果事务强制提交或者回滚,当前事务期间查询的记录集(Recordset)没有释放,则该Recordset将不能继续使用,该接口的作用。

          1.用于判断事务中是否有查询记录集没有释放。

          2.用于告知事务使用者强制事务提交和回滚后哪些数据集查询的记录集将不可用。

        • releaseDatasetMemory

          public void releaseDatasetMemory()
          释放引擎层智能指针引用,以此其他地方没使用数据集过后达到释放内存的效果。
        • hasSystemTable

          public boolean hasSystemTable()
          判断数据源是否有超图系统表

    Copyright © 2021–2024 SuperMap. All rights reserved.