2010-03-20 119 views
0

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

的实际问题是:

  1. 如果我尝试从同一个Prolog的窗口,在这里测试刚刚完成的呼叫谓语,我得到一个错误的更新到数据库服务器。尽管我没有在连接中出现任何错误。如果我关闭该序言的会议与halt并关闭所有打开的窗口序言,然后打开的Prolog的其他完整的新实例,并运行更新顺利谓语。

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

任何想法赞赏。

谢谢。

回答

1

如果您打开连接,不是做一个较长的处理,MySQL能够在下降之间有一定的超时后(我认为可以做my.cnf配置)的连接。

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

+0

我知道。但是我在更新谓词中再次打开连接。但我不知道为什么更新没有发生。 – JPro 2010-03-20 14:07:39

+0

看来你已经改变了你的问题部分确认我了超时连接的犯罪嫌疑人。你使用odbc_disconnect吗?否则,你应该尝试使用odbc_current_connection来检查你的连接。您也应该检查odbc_connect的关于连接和“多”开放模式的别名文件。 – baol 2010-03-21 12:50:21