来自数据库的Anylogic发行网络连接

时间:2019-04-05 19:52:51

标签: java anylogic

关于我要构建的Anylogic模型,我有一个具体问题。

我有3张桌子:

  1. 具有 connecteddc connectedcustomer
  2. 列的连接 列 custname demand
  3. 客户
  4. dcdetails具有列 dcname dccapactiy

我正在尝试编写一个Java代码,将第一个表( connecteddc )中的每个dc连接到每个分配的客户( connectedcustomer ),并多次遍历此过程建立准确的网络我尝试使用几种代码变体,如下所示。

for (int i=0; i<3 ; i++){
        dc.get(i).LinktoCustomers.connectTo(Locations.get(selectFirstValue(false, int.class, "SELECT connectedcustomer FROM connections WHERE connectedDC = "+i+";")));
}

此代码仅将1个DC连接到1个客户。此问题发生在代码的“ selectFirstValue”部分。

1 个答案:

答案 0 :(得分:0)

数据库查询

您必须使用一种可能性来检索所有相关的数据库条目,而不是像使用selectFirstValue()那样仅检索第一个。这是这样做的一种选择:

for (int i=0; i<dc.size() ; i++){
    List<Tuple> rows = selectFrom(connection)
        .where(connection.connecteddc.eq(dc.get(i).dcName))
        .list();

    for (Tuple row : rows) {
        dc.get(i).connectTo(getCustomerByName(row.get(connection.connectedcustomer)));
    }
}

提示:AnyLogic为您提供了创建此类查询的助手,您可以在AnyLogic工具栏的“插入数据库查询”下找到该查询。看起来像这样: AnyLogic Database Query Assistant

其他东西

我修改了一些引起我注意的其他内容:

  • 要添加连接,请使用dc.get(i).LinktoCustomers.connectTo(...)。不必为连接使用特殊变量,只需使用dc.get(i).connectTo(...)
  • 将其添加到标准连接就足够了。
  • 您将浏览带有硬编码的最大索引的DC列表。更改DC表中的条目数后,该代码将不再起作用。我推荐这样的东西:for (int i=0; i<dc.size() ; i++){...}
  • 您为“类型”“客户”的座席群体指定了“位置”名称。使用完全不反映基础座席类型的人口名称会造成混淆。我建议将其重命名,例如“客户”。
  • 要访问DC,请存储DC,并将DC的索引号用作表中的整数。为了安全起见,我建议改用唯一的字符串ID,即使更改表的顺序也可以使用。为此,您需要将ID(存储在表中)“解析”为Customer对象。

这可以在函数getCustomerByName(String name)中完成,尽管它显然缺少错误处理):

for(Customer c:Customers){
    if(c.custName.equals(name)){
        return c;
    }
}
return null;