首页 / 浏览问题 / 组件GIS / 问题详情
iObject创建mysql数据源创建成功后工作空间中没有数据源
43EXP 2020年05月27日

iObject创建mysql数据源创建成功后工作空间中没有数据源 代码如下:

workspace = openWorkspace(workspacePath);
// 定义数据源连接信息,假设以下所有数据源设置都存在
Datasources datasources = workspace.getDatasources();
datasources.closeAll();
DatasourceConnectionInfo datasourceconnection = new DatasourceConnectionInfo();
datasourceconnection.setServer("127.0.0.1");
datasourceconnection.setDatabase("testdb");
datasourceconnection.setAlias("data");
datasourceconnection.setUser("root");
datasourceconnection.setPassword("root");
datasourceconnection.setEngineType(EngineType.MYSQL);
datasources.create(datasourceconnection);
if (datasources != null) {
    System.out.println("数据源创建成功");
} else {
    System.out.println("数据源创建失败");
}

2 个回答

你的数据库 testdb需要先在数据库中新建,再在组件中进行数据库数据源创建
2,842EXP 2020年05月28日

testdb已经在数据库中创建了,

datasources.create(datasourceconnection);

这个执行完数据库中有自动生成出来的表,但是在代码中获取datasources.getCount()结果是0,在iDesktop中打开该工作空间也没有创建的数据源

在idesktop中创建的mysql数据库数据源或者是组件接口创建,可能会出现打开该mysql数据源失败,或者说打开了数据源后不能新建数据集,这种情况目前在是存在这个问题的,需要你先去mysql手动创建数据库(你可以使用MySQL的可视化工具进行操作),再在桌面创建对应名字的数据源才行。然后设置对应的数据源连接参数,再调用 workspace.getDatasources().open(datasourceconnection);进行打开数据源
数据库已经用MySQL工具创建出来了,在组件接口中创建数据库数据源是打不开的 只能通过桌面端新建工作空间新建数据库数据源才可以打开数据源。

你的意思是组件接口创建数据库数据源是会存在这个问题的是吗?只能通过桌面端先创建好再用吗?
先创建好数据库后再用组件接口去创建也是没有问题的,因为你这个工作空间被释放掉了,数据源没有被保存。建议你现在重新创建一个数据库,再在代码中先打开一个工作空间,再在工作空间里边创建mysql数据源,最后调用 workspace的save保存工作空间,这样才能够保存在工作空间里。(一个MySQL数据库只能创建一个MySQL数据库型数据源)

工作空间保存了的

1、打开工作空间

public static Workspace openWorkspace(String workspacePath){
    Workspace workspace = new Workspace();
    WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
    workspaceConnectionInfo.setVersion(WorkspaceVersion.UGC60);
    workspaceConnectionInfo.setType(WorkspaceType.SXWU);
    workspaceConnectionInfo.setServer(workspacePath);
    workspace.open(workspaceConnectionInfo);

    workspaceConnectionInfo.setServer(workspacePath);
    boolean open = workspace.open(workspaceConnectionInfo);
    if(open){
        System.out.println("工作空间打开成功");
    }else{
        System.out.println("工作空间打开失败");
    }
    workspaceConnectionInfo.dispose();
    return workspace;
}

//创建数据源

workspace = openWorkspace(workspacePath);
// 定义数据源连接信息
Datasources datasources = workspace.getDatasources();
datasources.closeAll();
DatasourceConnectionInfo datasourceconnection = new DatasourceConnectionInfo();
datasourceconnection.setServer("127.0.0.1");
datasourceconnection.setDatabase("gb_220000");
datasourceconnection.setAlias("data");
datasourceconnection.setUser("root");
datasourceconnection.setPassword("root");
datasourceconnection.setEngineType(EngineType.MYSQL);
datasources.create(datasourceconnection);
workspace.save();
if (datasources != null) {
    System.out.println("数据源创建成功");
} else {
    System.out.println("数据源创建失败");
}
你断点调试一下呢,看一下保存工作空间之前是否每个对象都不为空
还有别名不能有有重复的

每次创建之前都把工作空间删了重新建的

方便加QQ帮忙看下吗 我的1040816662

您好!您是用的iObjects.Net组件进行二次开发吗?我看您的接口全是

DatasourceConnectionInfo.set....iObjects.Net组件接口不是这样的啊,如下图

3,352EXP 2020年05月28日
我是用的iObject java
...