服务热线:010-62964229
格瑞纳根植于教育行业,让仿真软件从理论教学到应用实践
新闻资讯
当前位置:首页 > 新闻资讯 > 行业新闻
建模技巧 | AnyLogic中数据库应用的小陷阱(Part 1)——数据刷新
2022-06-29 14:47:03 发布人:admin 阅读 1959

使用过数据库时,您是否经历过一些奇怪的情况?好像数据库没有更新或刷新?您刚刚新添加到数据库中的值检索不到,但是当您关闭模型并查看数据库时,这些值又存在了。。。。

Well,你不是一个人!

在文章的底部,有两个关于Stack Overflow的其他用户的例子,他们也经历了在AnyLogic中使用数据库表的“Dark Side”。

案例

假设您有一个数据库表,其中包含模型的一些关键信息。

在运行时,您希望使用selectFrom()函数访问信息

您还需要使用update()函数更新表中的一些信息

当运行您的模型

您从DB中获得值,它会像预期的那样返回22。

然后保存一个新值25到DB

然后想从DB中获取这个新值,但它仍然返回22。。。。

关闭模型。

您可以查看DB值

它显示了保存的25

这是什么情况?


再次运行模型...

根据查看的 DB 值,它返回 25,如预期的一样。

您将值更改为 30。

然后获取 DB 值.. 它仍然返回25。

这是在搞笑吗!


保持模型打开并查看DB,值显示为 25...

关闭表并再次打开它......它显示30......


获取 DB 值,它仍然返回 25...


关闭模型

再次运行模型...


获取 DB 值,它返回 30!


超级烦躁!崩溃到大骂几声。。。。,然后发誓永远不再使用数据库!


可是等等....

似乎有什么导致了必然无法从数据库中获得正确的值。

如果您查看 firstResult() 文档,您将看到以下内容

默认情况下, firstResult() 函数将返回缓存的值!

如果您总是想获取最新值,则必须调用 firstResult(false, "column")

甚至于有一个缓存选项的原因是为了加快数据库的处理速度,其“险恶之处”在于它是默认启用的,对初学者没有任何警告或提示,因为如果您省略缓存参数,该功能仍然有效 .

另外!

请记住,还有一些其他功能具有相同的“特点”:

l firstResult()

l uniqueResult()

l count()

l hasResults()


注意:无论您使用的是 insertInto() 还是 ModelDatabase.importFromExternalDB,对数据库进行更新都是如此


Stack Overflow的其他用户的例子:

如何从代码中刷新 AnyLogic ModelDatabaseHow do I Refresh AnyLogic ModelDatabase from code?


如何更新数据库并让延迟模块参考延迟持续时间以更新值(How to update database and let delay block reference delay duration to updated value)?

您可以在点击下图下载具有正确解决方案的示例:

或者下载放置在AnyLogic云的模型

  电话:010-62964229
  邮箱:support@carila.cn
  地址:北京市海淀区上地信息产业基地三街3号楼1门4层401
©2021 北京格瑞纳电子产品有限公司 版权所有 京ICP备19024141号 京公网安备 11010802029095号
 
QQ在线咨询
点击这里给我发消息 点击这里给我发消息
服务热线
010-62964229
E-mail
support@
carila.cn
地址:北京市海
淀区上地信息产
业基地三街3号