Mysql 在SWI-Prolog中刷新数据库缓存

Mysql 在SWI-Prolog中刷新数据库缓存,mysql,swi-prolog,Mysql,Swi Prolog,我们正在使用swi prolog来运行我们的测试用例。每当测试开始时,我都会打开到MYSQL数据库的连接,并存储正在进行的测试的名称,然后关闭数据库。这些测试连续运行约2天。测试完成后,结果基本上存储在服务器的文件夹中。在另一个prolog文件中有一个谓词,它被调用以将结果更新到MYSQL数据库。代码很简单,我使用odbc库,只需调用odbc.*谓词即可通过直接查询连接和更新mysql 实际问题是: 如果我尝试从同一个Prolog窗口调用谓词,测试刚刚完成,那么在更新DB服务器时会出现一个错误。

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

实际问题是:

  • 如果我尝试从同一个Prolog窗口调用谓词,测试刚刚完成,那么在更新DB服务器时会出现一个错误。虽然我没有在连接中得到任何错误。如果我用
    halt
    关闭该prolog的会话,并关闭所有打开的prolog窗口,然后打开另一个完整的新prolog实例并运行谓词,则更新会顺利进行 我感觉Prolog数据库中有一些对MySQL数据库的连接引用。有没有办法清除prolog中的数据库,以便在不关闭任何现有prolog窗口的情况下运行相同的谓词

    任何想法都值得赞赏


    谢谢。

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


    编辑:swi prolog有一个
    odbc\u disconnect
    ,可用于在使用后显式关闭连接,还有一个“别名”模式,可用于在使用
    odbc\u open
    时获得以前打开的连接。在您的情况下,您可以尝试在使用连接后关闭连接。打开时还应避免使用别名。

    我知道这一点。但是我正在更新谓词中再次打开连接。但我不知道为什么更新没有发生。看来你已经改变了你的问题,部分证实了我对连接超时的怀疑。您是否使用odbc来断开连接?否则,您可能应该尝试使用odbc\u当前\u连接来检查您的连接。您还应该查看odbc_connect的文档,了解连接的别名和“多个”打开模式。