【问题标题】:Avoiding database queries in Anylogic在 Anylogic 中避免数据库查询
【发布时间】:2021-11-22 13:19:30
【问题描述】:

我想避免在 Anylogic 中进行代价高昂的重复数据库查询。我在 Stack Overflow What is the fastest way to look up continuous data on Anylogic (Java, SQL) 中看到了以下线程,其中提供了一个简单的三步答案,但我不确定这三者中的第二点实际上是什么意思:

  1. 在模型启动时将所有行作为该类的实例保存到地图中 - 您可以使用 Origin/Destination 作为键(使用 Anylogic 的 Pair 对象)并将类实例作为值

我创建了一个类,该类将数据库每一列的信息作为输入。我现在想将每一行保存为该类的一个实例 - 有没有一种简单的方法可以做到这一点?由于我是 Anylogic 的新手,所以我可能会遗漏一些简单的东西。

我也不确定如何创建映射,如果有人可以在上面的第 2 点添加更多细节,我将非常感激!

【问题讨论】:

    标签: database class mapping row anylogic


    【解决方案1】:

    这实际上是最好的建议,您创建了类,这是一个很好的步骤,但是现在,该类的一个元素将用作键...例如名称...例如,如果您的类将 firstName 作为一个变量,lastName 作为另一个变量,您将使用一个字符串,该字符串是 firstName 和 lastName 的连接作为您的键。当然,任何键都可以,假设它对您的所有表都是唯一的。一个整数作为 id 也是可以的。

    1. 创建一个 LinkedHashMap 类型的集合

    2. 创建一个类(你做到了)

    3. 您的集合将以字符串(名字+姓氏)作为键,并将类作为元素的值...

    现在,当您读取数据库时,您将看到如下内容:

    for(Tuple t : yourQueryResults){
        YourClass yc=new YourClass(t.get(db.var1),t.get(db.var2));
        String totalName=t.get(db.first_name)+"_"+t.get(db.last_name);
        yourCollection.put(totalName,yc);
    }
    

    现在每次你想找一个有名字的人,例如“John Doe”,而不是进行查询,你会这样做

    yourCollection.get("John_Doe").theVarYouWant;
    

    如果你使用 id 而不是 name,你可以设置一个 int 作为 key,然后你就可以yourCollection.get(theId).theVarYouWant

    【讨论】:

    • 感谢@Felipe 完美运行!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2017-09-08
    • 2011-12-15
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多