2010-03-20 118 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