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的文档,了解连接的别名和“多个”打开模式。