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(EngineType enginetype)
根据指定的参数构造Datasource类的新实例。
|
限定符和类型 | 方法和说明 |
---|---|
void |
addDisconnectedListener(DatasourceDisconnectedListener l)
添加一个用于接收数据源断开连接结束事件(
DatasourceDisconnectedEvent )的监听器。 |
void |
addLockChangedListener(DatasourceLockChangedListener l)
添加一个用于接收数据源锁变化事件(
DatasourceLockChangedEvent )的监听器。 |
void |
addRecordsetEditListener(DatasetVector relationship,
RecordsetEditListener l)
添加一个用于接收数据记录编辑事件(
RecordsetEditListener )的监听器。 |
void |
addRefreshedListener(DatasourceRefreshedListener l)
添加一个用于接收数据源刷新结束事件(
DatasourceRefreshedEvent )的监听器。 |
void |
addSteppedListener(SteppedListener l)
添加一个用于接收进度条事件(
SteppedEvent )的监听器。 |
boolean |
beginTrans(boolean autoCommitWhileDDL,
long timeOut)
开启事务,一个数据源对象只支持开启一次事务。
|
boolean |
changePassword(String oldPassword,
String newPassword)
修改已经打开的数据源的密码。
|
void |
close()
关闭当前数据源。
|
boolean |
commitTrans(boolean forced)
提交事务。
|
boolean |
connect()
用于连接数据源。
|
Dataset |
copyDataset(Dataset srcDataset,
String desDatasetName,
EncodeType encodeType)
用于在相同或不同引擎数据源中复制数据集。
|
Dataset |
copyDataset(Dataset srcDataset,
String desDatasetName,
EncodeType encodeType,
Charset nCharset)
根据指定的编码类型以及字符集类型复制数据集。
|
Dataset |
copyDataset(Dataset srcDataset,
String desDatasetName,
EncodeType encodeType,
SteppedListener listener)
复制数据集。
|
Dataset |
copyDatasetVectorWithPyramid(Dataset srcDataset,
String desDatasetName,
EncodeType encodeType)
复制数据集,并将数据集带有的金字塔一起复制。
|
Dataset |
copyDatasetWithSmID(Dataset srcDataset,
String desDatasetName,
EncodeType encodeType)
复制数据集,保留SmID的值。
|
Dataset |
copyWithSMIDIsCopyVectorPyd(Dataset srcDataset,
String desDatasetName,
EncodeType encodeType,
boolean bCopyVectorPyraimd)
复制数据集,复制前后SmID保持一致,并可设置是否将数据集带有的金字塔一起复制。
|
boolean |
create(DatasourceConnectionInfo connectioninfo)
根据指定的数据源连接信息创建数据源。
|
boolean |
createSequence(String sequenceName)
根据给定的名称创建一个序列。
|
boolean |
createSequence(String sequenceName,
long startValue,
long maxValue,
int incrementValue)
根据给定的参数创建序列,可以自定义序列长度和步长。
|
boolean |
deleteSequence(String sequenceName)
删除指定名称的序列。
|
boolean |
executeSQL(String sql)
用于对数据库类型的数据源执行一个 SQL 语句。
|
DatasetVector |
fieldToPointDataset(DatasetVector srcDataset,
String desDatasetName,
String fieldX,
String fieldY)
从一个矢量数据集的属性表中的 X、Y 坐标字段创建点数据集。
|
boolean |
flush(String datasetName)
用于将内存中暂未写入数据库中的数据保存到数据库。
|
String |
getAlias()
返回数据源的别名。
|
HashMap<String,DatasourcePrivilegeTypes> |
getAllPrivilegeTypes()
获取所有用户或角色对数据源的权限,包括创建数据集、创建数据集分组
在SuperMap系统中只允许超级用户修改此权限。
|
AttributeRuleInfoManager |
getAttributeRuleInfoManager()
返回值属性规则信息管理对象
|
static int |
getConnectCheckInterval()
返回两次检测连接数据库时间间隔,以毫秒为单位。
|
DatasourceConnectionInfo |
getConnectionInfo()
返回此数据源的连接信息。
|
Unit |
getCoordUnit()
返回数据源坐标单位。
|
String |
getCreateUser()
获取数据源的创建用户
|
String[] |
getDatasetNamesInTrans()
获取事务内有查询记录集存在的数据集名称数组。
|
Datasets |
getDatasets()
返回此数据源所包含的数据集的集合对象。
|
String |
getDateLastUpdated()
获取数据源最后更新的时间。
|
String |
getDescription()
返回用户添加的关于数据源的描述信息。
|
Unit |
getDistanceUnit()
返回数据源的距离单位。
|
DomainManager |
getDomainManager()
返回值域管理对象。
|
EngineType |
getEngineType()
返回此数据源的数据引擎类型。
|
LockStateType |
getLockState()
获取数据源的内存锁状态。
|
DatasourcePrivilegeTypes |
getPrivilegeTypes(String roleOrUserName)
获取某用户或角色对连接信息的数据源是否有管理数据集的权限,包括创建数据集、创建数据集分组。
|
PrjCoordSys |
getPrjCoordSys()
返回数据源的投影信息。
|
ReplicaManager |
getReplicaManager()
获取数据源的复本管理类对象。
|
DatasetGroup |
getRootGroup()
返回数据集分组的根组。
|
long |
getSequenceNextValue(String sequenceName)
返回指定序列的下一个值。
|
Datasource |
getTransDatasource()
获取事务轻量数据源,与主数据源共享连接池,
主数据源打开时会设置连接池最大连接数,最大连接数决定了连接池最多可以新建的数据库连接数,数据源事务开启时会独占一个连接,
所有的事务编辑操作都使用这一个连接,这会导致多用户并发编辑时出现排队的情况。
|
DatasourceTransStateType |
getTransState()
获取数据源的事务状态。
|
VersionManager |
getVersionManager()
获取数据源的版本管理类对象。
|
Workspace |
getWorkspace()
得到数据源所在的工作空间对象。
|
boolean |
hasPrivilegeGrant()
是否可修改用户的数据源权限,只有当前连接为超级用户才可以
|
DatasetVector |
innerPointToDataset(DatasetVector srcDataset,
String desDatasetName)
创建矢量数据集的内点数据集,并把矢量数据集中几何对象的属性复制到相应的点数据集属性表中。
|
boolean |
isAutoConnect()
返回一个布尔值指定数据源是否自动连接数据库。
|
boolean |
isCanConnect()
用于连接数据源,连接成功返回 True;否则返回 False。
|
boolean |
isConnected()
判断数据源是否与数据库连接,非数据库型数据源此方法无效。
|
boolean |
isFieldIndexNameExist(String strIndexName,
String strTableName)
判断指定表名的指定索引名称是否存在。
|
boolean |
isModified()
返回此数据源是否有改动。
|
boolean |
isOpened()
返回数据源是否打开的状态,如果数据源处于打开状态,返回 true,如果数据源被关闭,则返回 false。
|
boolean |
isReadOnly()
返回数据源是否以只读方式打开。
|
boolean |
isSequenceExist(String sequenceName)
判断指定的序列是否存在。
|
boolean |
isUnicodeSupported()
返回判断当前数据源是否支持 Unicode 数据存储,true 表示支持;false 表示不支持。
|
DatasetVector |
labelToTextDataset(DatasetVector srcDataset,
String desDatasetName,
String textField,
TextStyle textStyle)
用于将数据集的属性字段生成一个文本数据集。
|
boolean |
open(DatasourceConnectionInfo connectioninfo)
根据指定的数据源连接信息打开数据源。
|
Dataset |
open(DatasourceConnectionInfo connectioninfo,
String strDtName)
根据指定的数据源连接信息和数据集名称打开数据源获取数据集。
|
Recordset |
query(String Strsql)
使用SQL语句查询记录。
|
DatasetVector |
queryDataset(String Strsql)
使用SQL语句查询数据集。
|
DatasetVector |
recordsetToDataset(Recordset recordset,
String desDatasetName)
用于将记录集的内容生成一个相应类型的矢量数据集。
|
void |
refresh()
该方法用于对数据库类型的数据源进行刷新。
|
int |
ReleaseIdleConn()
主动释放空闲连接。
|
void |
removeDisconnectedListener(DatasourceDisconnectedListener l)
移除一个用于接收数据源断开连接结束事件(
DatasourceDisconnectedEvent )的监听器。 |
void |
removeLockChangedListener(DatasourceLockChangedListener l)
移除一个用于接收数据源锁变化事件(
DatasourceLockChangedEvent )的监听器。 |
void |
removeRecordsetEditListener(DatasetVector relationship,
RecordsetEditListener l)
移除一个用于接收数据记录编辑事件(
RecordsetEditListener )的监听器。 |
void |
removeRefreshedListener(DatasourceRefreshedListener l)
移除一个用于接收数据源刷新结束事件(
DatasourceRefreshedEvent )的监听器。 |
void |
removeSteppedListener(SteppedListener l)
移除一个用于接收进度条事件(
SteppedListener )的监听器。 |
boolean |
rollbackTrans(boolean forced)
回滚事务
|
void |
setAutoConnect(boolean value)
设置一个布尔值指定数据源是否自动自动连接数据库。
|
static void |
setConnectCheckInterval(int interval)
设置两次检测连接数据库时间间隔,以毫秒为单位。
|
void |
setCoordUnit(Unit value)
设置数据源坐标单位。
|
void |
setDescription(String value)
设置用户添加的关于数据源的描述信息。
|
void |
setDistanceUnit(Unit value)
设置数据源的距离单位。
|
boolean |
setLockState(LockStateType lockType)
数据源设置内存锁状态。
|
boolean |
setPrivilegeTypes(String roleOrUserName,
DatasourcePrivilegeTypes privilegeTypes)
设置某用户或角色对连接信息的数据源是否有管理数据集的权限,包括创建数据集、创建数据集分组。
|
void |
setPrjCoordSys(PrjCoordSys value)
设置数据源的投影信息。
|
void |
updateDataset()
对数据集进行更新操作。
|
public Datasource(EngineType enginetype)
enginetype
- 引擎类型。public Dataset open(DatasourceConnectionInfo connectioninfo, String strDtName)
connectioninfo
- 数据源连接信息。strDtName
- 数据集名称。public boolean open(DatasourceConnectionInfo connectioninfo)
connectioninfo
- 数据源连接信息。public boolean create(DatasourceConnectionInfo connectioninfo)
connectioninfo
- 数据源连接信息。public void close()
public String getAlias()
public static int getConnectCheckInterval()
DatasourceDisconnectedEvent
事件有效。public static void setConnectCheckInterval(int interval)
该值对 DatasourceDisconnectedEvent
事件有效。
interval
- 两次检测连接数据库时间间隔,以毫秒为单位。public boolean isConnected()
如果数据源没有连接,可以通过调用 connect()
方法 来实现与数据库的连接。
public boolean isOpened()
public boolean isAutoConnect()
public void setAutoConnect(boolean value)
value
- 一个布尔值指定是否自动连接。public DatasourceConnectionInfo getConnectionInfo()
DatasourceConnectionInfo
类。DatasourceConnectionInfo
public Datasets getDatasets()
一个数据源中所有的数据集对象都由一个数据集集合对象来管理。当数据源中存在多个 schema,可获取到多个 schema 下的数据集,同名数据集将采用 schema.datasetname 的形式进行区分。(多个 schema 的情况当前仅支持 PostGIS 和 YuKon 引擎)
特别说明:PostGIS数据库中存在第三方来源的大小写不同的同名数据集时,引擎暂未对此场景做处理。
public String getDescription()
public int ReleaseIdleConn()
public void setDescription(String value)
value
- 用户添加的关于数据源的描述信息。public EngineType getEngineType()
EngineType
类型。EngineType
public boolean isModified()
public PrjCoordSys getPrjCoordSys()
public void setPrjCoordSys(PrjCoordSys value)
value
- 数据源的投影信息。public Unit getCoordUnit()
public void setCoordUnit(Unit value)
value
- 数据源坐标单位。public Unit getDistanceUnit()
public void setDistanceUnit(Unit value)
value
- 数据源的距离单位。public boolean isReadOnly()
对文件型数据源,如果只读方式打开,就是共享的,可以打开多次;如果以非只读方式打开,则只能打开一次。
如果以只读方式打开数据源,数据源的相关信息以及其中的数据都不可修改。即在数据源中不允许进行下列操作,例如:复制数据集(copyDataset()
),创建内点数据集(innerPointToDataset()
),根据关联表的坐标字段创建点数据集(fieldToPointDataset()
),属性字段生成文本数据集(labelToTextDataset()
),将记录集的内容生成矢量数据集(recordsetToDataset()
)。
对于影像数据源(IMAGEPLUGINS
引擎类型)只会以只读方式打开。
public boolean isUnicodeSupported()
public Workspace getWorkspace()
public boolean isCanConnect()
public boolean connect()
可以通过 isConnected()
方法判断数据源与数据库是否连接。未连接时可以使用 connect()
方法重新连接。
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); }
public Dataset copyDataset(Dataset srcDataset, String desDatasetName, EncodeType encodeType, SteppedListener listener)
srcDataset
- 复制的源数据集。desDatasetName
- 目标数据集名称。encodeType
- 编码方式。listener
- 进度条事件监听器。public Dataset copyDatasetWithSmID(Dataset srcDataset, String desDatasetName, EncodeType encodeType)
srcDataset
- 要复制的源数据集。desDatasetName
- 目标数据集的名称。encodeType
- 数据集的编码方式。public Dataset copyDatasetVectorWithPyramid(Dataset srcDataset, String desDatasetName, EncodeType encodeType)
srcDataset
- 源数据集。desDatasetName
- 目标数据集名称。encodeType
- 编码类型。public Dataset copyWithSMIDIsCopyVectorPyd(Dataset srcDataset, String desDatasetName, EncodeType encodeType, boolean bCopyVectorPyraimd)
srcDataset
- 源数据集。desDatasetName
- 目标数据集名称。encodeType
- 编码方式。bCopyVectorPyraimd
- 是否复制金字塔。public Dataset copyDataset(Dataset srcDataset, String desDatasetName, EncodeType encodeType, Charset nCharset)
srcDataset
- 要复制的源数据集。desDatasetName
- 目标数据集的名称。encodeType
- 数据集的编码方式。nCharset
- 数据集的字符集类型。public DatasetVector innerPointToDataset(DatasetVector srcDataset, String desDatasetName)
srcDataset
- 要计算内点数据集的矢量数据集。desDatasetName
- 结果点数据集的名称。Datasource.fieldToPointDataset(DatasetVector, String, String, String)
Datasource.fieldToPointDataset()
方法的示例。public DatasetVector fieldToPointDataset(DatasetVector srcDataset, String desDatasetName, String fieldX, String fieldY)
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(); }
public DatasetVector labelToTextDataset(DatasetVector srcDataset, String desDatasetName, String textField, TextStyle textStyle)
srcDataset
- 要转换属性的数据集,必须为矢量数据集。desDatasetName
- 目标文本数据集名,此数据集存放于调用本方法的数据源中。textField
- 要转换的属性字段的名称。textStyle
- 文本数据集的风格。Datasource.fieldToPointDataset(DatasetVector,String,String, String)
Datasource.fieldToPointDataset()
方法的示例。public DatasetVector recordsetToDataset(Recordset recordset, String desDatasetName)
recordset
- 要转换的源记录集。desDatasetName
- 要生成的矢量数据集的名称。Datasource.fieldToPointDataset(DatasetVector,String,String, String)
Datasource.fieldToPointDataset()
方法的示例。public DatasetVector queryDataset(String Strsql)
Strsql
- SQL语句。public VersionManager getVersionManager()
public ReplicaManager getReplicaManager()
public boolean setPrivilegeTypes(String roleOrUserName, DatasourcePrivilegeTypes privilegeTypes)
在SuperMap系统中只允许超级用户修改此权限。
roleOrUserName
- 角色或用户名,传入的名称如果是超级用户,则返回失败,超级用户的权限不允许被修改privilegeTypes
- 数据源权限类型public DatasourcePrivilegeTypes getPrivilegeTypes(String roleOrUserName)
在SuperMap系统中只允许超级用户修改此权限。
roleOrUserName
- 角色或用户名public HashMap<String,DatasourcePrivilegeTypes> getAllPrivilegeTypes()
在SuperMap系统中只允许超级用户修改此权限。
public boolean hasPrivilegeGrant()
public String getCreateUser()
public DomainManager getDomainManager()
public AttributeRuleInfoManager getAttributeRuleInfoManager()
public boolean changePassword(String oldPassword, String newPassword)
只有在工作空间处于打开的状态下,才能修改密码,并且该方法只针对文件型的数据源。
oldPassword
- 指定的旧的密码。newPassword
- 指定的新的密码。public boolean createSequence(String sequenceName)
sequenceName
- 指定的待创建序列的名称。public boolean createSequence(String sequenceName, long startValue, long maxValue, int incrementValue)
sequenceName
- 指定的待创建序列的名称。startValue
- 指定的序列的起始值。maxValue
- 指定的序列的终止值。指定为 -1,表示采用 Int64 类型的最大值作为终止值。incrementValue
- 指定的增长步长。public long getSequenceNextValue(String sequenceName)
序列刚创建时,使用该方法获得的是序列的起始值。当序列被使用后,使用该方法可以获取到下一个将要被使用的序列值。注意,序列值是以该序列指定的步长来增长的。
sequenceName
- 指定的序列名称。public boolean deleteSequence(String sequenceName)
sequenceName
- 指定的待删除序列的名称。public boolean isSequenceExist(String sequenceName)
sequenceName
- 指定的序列名称。public boolean executeSQL(String sql)
SQL 语句中可直接书写执行事务处理相关的语句而不需设置“以事务方式打开”;
注意:当前版本暂不支持事务的处理。
sql
- 标准 SQL 查询语句.public void refresh()
public boolean flush(String datasetName)
datasetName
- 需要刷新的数据集名称。当传入长度为空的字符串,表示对所有数据集进行刷新;否则对指定名字的数据集进行刷新。public void addDisconnectedListener(DatasourceDisconnectedListener l)
DatasourceDisconnectedEvent
)的监听器。l
- 一个用于接收数据源断开连接结束事件的监听器。public void removeDisconnectedListener(DatasourceDisconnectedListener l)
DatasourceDisconnectedEvent
)的监听器。l
- 一个用于接收数据源断开连接结束事件的监听器。public void addLockChangedListener(DatasourceLockChangedListener l)
DatasourceLockChangedEvent
)的监听器。l
- 一个用于接收数据源锁变化事件的监听器。public void removeLockChangedListener(DatasourceLockChangedListener l)
DatasourceLockChangedEvent
)的监听器。l
- 一个用于接收数据源锁变化事件的监听器。public void addRefreshedListener(DatasourceRefreshedListener l)
DatasourceRefreshedEvent
)的监听器。l
- 一个用于接收数据源刷新结束事件的监听器。public void removeRefreshedListener(DatasourceRefreshedListener l)
DatasourceRefreshedEvent
)的监听器。l
- 一个用于接收数据源刷新结束事件的监听器。public void addSteppedListener(SteppedListener l)
SteppedEvent
)的监听器。l
- 一个用于接收进度条事件的监听器。public void removeSteppedListener(SteppedListener l)
SteppedListener
)的监听器。l
- 一个用于接收进度条事件的监听器。public void updateDataset()
public DatasetGroup getRootGroup()
public String getDateLastUpdated()
public boolean isFieldIndexNameExist(String strIndexName, String strTableName)
strIndexName
- 指定的索引名称。strTableName
- 指定的表名。public LockStateType getLockState()
public boolean setLockState(LockStateType lockType)
lockType
- 锁的类型。 指定的索引名称。public void addRecordsetEditListener(DatasetVector relationship, RecordsetEditListener l)
RecordsetEditListener
)的监听器。relationship
- 矢量数据集对象。l
- 一个用于接收数据记录编辑事件的监听器。public void removeRecordsetEditListener(DatasetVector relationship, RecordsetEditListener l)
RecordsetEditListener
)的监听器。relationship
- 矢量数据集对象。l
- 一个用于接收数据记录编辑事件的监听器。public Datasource getTransDatasource()
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毫秒,如果没有其他线程释放连接,那么就会开启事务失败,接口返回的失败。public boolean commitTrans(boolean forced)
forced
- 是否强制提交。
true任何情况都强制提交,需要注意的是,强制提交后,当事务内查询的记录集未释放,则记录集状态发生错误,无法继续在后续的代码中使用。
false事务内存在查出的记录集没释放完则不提交,否则提交。
如果想获取哪些数据集查询了记录集还未释放,可以调用Datasource.getDatasetNamesInTrans()
。
public boolean rollbackTrans(boolean forced)
forced
- 是否强制回滚。
true任何情况都回滚,需要注意的是,强制回滚后,当事务内查询的记录集未释放,则记录集状态发生错误,无法继续在后续的代码中使用。
false事务内存在查出的记录集没释放完则不回滚,否则回滚。
如果想获取哪些数据集查询了记录集还未释放,可以调用Datasource.getDatasetNamesInTrans()
。
public DatasourceTransStateType getTransState()
public String[] getDatasetNamesInTrans()
如果事务强制提交或者回滚,当前事务期间查询的记录集(Recordset)没有释放,则该Recordset将不能继续使用,该接口的作用。
1.用于判断事务中是否有查询记录集没有释放。
2.用于告知事务使用者强制事务提交和回滚后哪些数据集查询的记录集将不可用。
Copyright © 2021–2024 SuperMap. All rights reserved.