使用过数据库时,您是否经历过一些奇怪的情况?好像数据库没有更新或刷新?您刚刚新添加到数据库中的值检索不到,但是当您关闭模型并查看数据库时,这些值又存在了。。。。
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 ModelDatabase(How do I Refresh AnyLogic ModelDatabase from code)?
您可以在点击下图下载具有正确解决方案的示例:
或者下载放置在AnyLogic云的模型