【问题标题】:flushing database cache in SWI-Prolog在 SWI-Prolog 中刷新数据库缓存
【发布时间】:2010-03-20 10:41:22
【问题描述】:

我们使用swi-prolog 来运行我们的测试用例。每当测试开始时,我都会打开与MYSQL database 的连接并存储测试帽子的名称,然后关闭数据库。这些测试连续运行大约 2 天。测试完成后,结果基本上存储在服务器的文件夹中。在另一个 prolog 文件中有一个谓词被调用以将结果更新到 MYSQL 数据库。代码很简单,我使用odbc库,只需调用odbc_*谓词通过发出直接查询来连接和更新mysql。

实际问题是:

  1. 如果我尝试从刚刚完成测试的同一个 Prolog 窗口调用谓词,则会在更新到数据库服务器时收到错误消息。虽然我在连接中没有收到任何错误。如果我使用 halt 关闭该 prolog 的会话并关闭所有打开的 prolog windows ,然后打开另一个完整的 Prolog 新实例并运行谓词更新顺利。

我感觉 Prolog 数据库中有一些对 MySQL DB 的连接引用。有什么方法可以清除 prolog 中的数据库,这样我就可以在不关闭任何现有 prolog 窗口的情况下运行相同的谓词?

任何想法表示赞赏。

谢谢。

【问题讨论】:

    标签: mysql swi-prolog


    【解决方案1】:

    如果您打开连接,而不是进行长时间处理,MySQL 可以在一定超时后断开连接(我相信可以在 my.cnf 中配置)。

    编辑:swi-prolog 有一个odbc_disconnect,可用于在使用它后显式关闭连接,以及一个“别名”模式,可用于在使用odbc_open 时获取先前打开的连接。在您的情况下,您可以尝试在使用后关闭连接。您还应该避免在打开时使用别名。

    【讨论】:

    • 我知道。但是我在更新谓词中再次打开连接。但我不确定为什么没有更新。
    • 看来你已经改变了你的问题,部分证实了我对超时连接的怀疑。你使用 odbc_disconnect 吗?否则,您或许应该尝试使用 odbc_current_connection 来检查您的连接。您还应该查看 odbc_connect 的文档,了解连接的别名和“多个”打开模式。
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2016-05-18
    • 2016-09-03
    • 1970-01-01
    • 2018-03-27
    相关资源
    最近更新 更多