【问题标题】:How to store listed values from a database to variables in Anylogic 8.7.1?如何将列出的值从数据库存储到 Anylogic 8.7.1 中的变量?
【发布时间】:2021-04-02 09:25:21
【问题描述】:

我正在 Anylogic 8.7 中创建一个基于代理的模型。有一点我想用query从一个带条件的数据库表(rs_table)中获取一个List of values,这里是anylogic在指定位置写的Java代码:

(int) selectFrom(rs_table) .where(rs_table.tr.eq(1)) .list(rs_table.impact)

但我不知道如何存储这些值以及如何一一获取它们。如果你能帮助我,我将不胜感激。

【问题讨论】:

    标签: java anylogic


    【解决方案1】:

    我会使用一个集合。从“代理”托盘中添加一个集合元素。该集合应具有以下属性:

    • 集合类:LinkedList
    • 元素类:整数

    使用以下代码:

    collection.addAll(
    selectFrom(rs_table) .where(rs_table.tr.eq(1)) .list(rs_table.impact)
    );
    

    现在,您可以按如下方式访问集合中的值:

    collection.get(i);
    

    【讨论】:

    • 感谢您的回复,它帮助我完成了该过程,但现在我想通过使用变量作为条件使此查询动态化:collection.addAll( selectFrom(rs_table) .where(rs_table .tr.eq(Tr)) .list(rs_table.impact) );我使用“Tr”变量作为查询条件,但现在在模型运行时出现 Nullpointer 异常。是否可以将此动态功能嵌入到查询中?
    【解决方案2】:

    插入数据库查询向导的“迭代返回的行并执行某些操作”选项正是为此而设计的。它生成查询代码,循环遍历返回的列表并将每一列的值打印到控制台(通过traceln 调用);您只需将循环中的代码替换为您对每个返回的行实际执行的操作(模板代码向您展示如何获取行中每一列的值)。

    向导(如果您使用 QueryDSL 表单)将生成如下代码:

    List<Tuple> rows = selectFrom(rs_table)
        .where(rs_table.tr.eq(1))
        .list();
    
    for (Tuple row : rows) {
        traceln(
            row.get( rs_table.tr ) + "\t" + 
            row.get( rs_table.impact )
        );
    }
    

    (对于除trimpact 之外的任何其他表列,还有额外的row.get 行。

    (在 Java 术语中,查询的 list 函数返回 ListTuple 对象,如代码所示。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多