如何在Anylogic中动态读取数据库列

如何在Anylogic中动态读取数据库列,anylogic,Anylogic,背景一:我有以下几种药剂类型:活性和途径。路径是包含各种活动的媒介。活动包含给其他代理(订单)的特定指示。路径是这些指令的集合。 路径集合是通过数据库定义的,其中每行是1个路径代理,每列是活动的字符串ID,单元格值为0、1、2等,具体取决于分配给该路径的每个活动的数量 目标:我需要在代理启动时在pathway代理中创建一组活动 我所尝试的: 我主要创建了一批活动。每个路径都有一个activityList,其中包含所有活动的字符串ID。其目的是当一个细胞值等于或大于1时,代码将从main中选择相应

背景一:我有以下几种药剂类型:活性和途径。路径是包含各种活动的媒介。活动包含给其他代理(订单)的特定指示。路径是这些指令的集合。 路径集合是通过数据库定义的,其中每行是1个路径代理,每列是活动的字符串ID,单元格值为0、1、2等,具体取决于分配给该路径的每个活动的数量

目标:我需要在代理启动时在pathway代理中创建一组活动

我所尝试的: 我主要创建了一批活动。每个路径都有一个activityList,其中包含所有活动的字符串ID。其目的是当一个细胞值等于或大于1时,代码将从main中选择相应的活性剂,并将其放入路径中的群体中。在下面的代码中,我从其他文章中注意到索引用于遍历行,但这似乎不适用于列

问题:我无法获得基于字符串ID列表动态搜索列的代码

activityIndex = 0;
// there are 115 activities in the list, the code would repeat for each one
while (activityIndex <= 114)
{
    activityName = activityList.get(activityIndex);
// search below returns the cell value from row with pathway ID = agAssess
// it searches the column with string ID matching activityName
// note: error returned as the database does not contain a column named "activityName"
// in this case "activityName" in the search below would need to be replaced with the parameter's value
// error message: activityName cannot be resolved or is not a field
    double value = selectFrom(activity_groups_assess).
        where(activity_groups_assess.code.eq(agAssess)).
        uniqueResult(activity_groups_assess.activityName);
// if the value > 0, create agent with string ID activityName
// for agents with value > 1, multiple agents with the same string ID would be created, hence while function
    while (value > 0)
    {
// find the agent with the same string ID
        Activity newActivity = findFirst(main.activities, p -> p.code == activityName);
// add agent to population activitiesAssess
// error when adding agent: Description: The method add_activitiesAssess() in the type ClinicalPathway is not applicable for the arguments (Activity).
        add_activitiesAssess( newActivity );
        value--;
    }
    activityIndex++;
}
activityIndex=0;
//列表中有115项活动,每个活动都会重复代码
而(activityIndex也许这有助于:

可以使用以下类型将对数据库表的引用存储在变量中:

com.mysema.query.sql.RelationalPathBase

在特定列中选择double(int、String等)类型的值时,可以通过索引调用
variable.getColumns().get(index)
来获取该列。然后需要将其强制转换为相应的类型,如下所示:

List resultRows=selectFrom(变量)。其中(
((com.mysema.query.types.path.NumberPath)variable.getColumns().get(1)).eq(2.0))

.list(((com.mysema.query.types.path.NumberPath)variable.getColumns().get(1));

我可以先澄清一下吗,您有一个如下表:

通路id 活动1 活动2 活动3 一 0 3. 2. 二 1. 0 1. 三 1. 1. 0
感谢我在另一篇SOF文章中探索了相同的解决方案,但它并没有真正解决问题。代码需要返回特定列的单元格值,而不是满足变量的列列表。如果值>0,则我将与列具有相同ID的代理添加到填充中。但该值可能会e 1、2、3等需要创建具有相同ID的多个代理。此外,我还不完全清楚如何将类型com.mysema.query.sql.RelationalPathBase转换为字符串,以便将代理的ID与列的标题进行比较。非常感谢。因此,如果列“Activity 1”的单元格中的值为3,则代码将创建3个“路径一”中的“活动1”代理。如果“活动N”的单元格中的值为1,则代码将在“路径一”中创建1个代理。如果值为0,则不会创建代理。您正确地假设活动的数量也是可变的。抱歉,我必须对代码进行编辑,以使答案为已更新。为此,我无法再次将代码粘贴到此处,因为它太长。Q1:代码位于pathway agent中,因此无需搜索所有行,如何引用pathway agent?Q2:什么是
(!activityName.equalsIgnoreCase(“pathwayid”))
这样做?因为只有当单元格值>0时才应触发if条件,而不是通过与路径ID Q3匹配:应澄清存在多个活动群体。如何将位于main.activityDatabase pop中的代理添加到pathway.activities评估pop?为了清晰起见,我在上面的主要帖子中包含了更新的代码。V1是b基于您的,V2是我认为它应该是什么样子的重写。想法?回答您的问题-Q1:通常您可以使用“this”关键字从内部引用代理。但是如果您有一个名为“pathwayId”的属性,您可以直接引用该属性,而不使用“this”;Q2:此条件跳过行中具有该属性的列路径id,只查看所有其他列;问题3:答案取决于。对于特定的活动代理类型,您是否每个都有114个群体?这可能太多了。