在使用Java代码操作数据源往数据源中添加数据时报错。
问题描述:
操作本地数据源文件时操作成功,成功向数据源中添加了一条数据
想要操作iserver中的数据源,以下代码报错,提示读取XML信息失败,什么原因,如何解决?
Exception in thread "main" javax.management.RuntimeErrorException: 读取XML信息失败
at com.supermap.data.Datasources.open(SourceFile:152)
at ArticleServiceImplTest.main(ArticleServiceImplTest.java:328)
public static void main(String[] args) throws UnsupportedEncodingException {
// 1. 初始化 SuperMap 环境
Workspace workspace = new Workspace();
DatasourceConnectionInfo connectionInfo = new DatasourceConnectionInfo();
// 2. 设置 UDBX 数据源路径
//String udbxPath = "D://test.udbx"
String udbxPath = "http://ip/iserver/services/data-China200Test/rest/data"; // UDBX 文件路径
connectionInfo.setServer(udbxPath);
connectionInfo.setEngineType(EngineType.ISERVERREST);
connectionInfo.setAlias("China");
// 3. 打开数据源
Datasource datasource = workspace.getDatasources().open(connectionInfo);
if (datasource == null) {
System.out.println("打开数据源失败!");
return;
}
// 4. 获取属性表数据集(假设数据集名称为 "AttributeTable")
DatasetVector dataset = (DatasetVector) datasource.getDatasets().get("area");
if (dataset == null) {
System.out.println("属性表数据集不存在!");
return;
}
// 5. 打开记录集
Recordset recordset = dataset.getRecordset(false, CursorType.DYNAMIC);
if (recordset == null) {
System.out.println("打开记录集失败!");
return;
}
//检查字段信息
FieldInfos fieldInfos = dataset.getFieldInfos();
for (int i = 0; i < fieldInfos.getCount(); i++) {
FieldInfo fieldInfo = fieldInfos.get(i);
System.out.println("字段名称:"+fieldInfo.getName()+"字段类型"+fieldInfo.getType());
}
// 6. 添加新记录
recordset.addNew(null); // 添加一条空记录
recordset.setString("id", "4.0"); // 设置属性字段值
recordset.setString("name", "河北省"); // 设置属性字段值
recordset.update(); // 更新记录集
// 7. 关闭记录集
recordset.close();
// 8. 保存并关闭数据源
workspace.getDatasources().closeAll();
workspace.close();
System.out.println("属性表数据添加完成!");
}