2010-03-20 4 views
0

Мы используем swi-prolog для запуска наших тестовых корпусов. Всякий раз, когда начинается тест, я открываю соединение с MYSQL database и записывает имя тестовой шляпы, а затем закрывает БД. Эти испытания продолжаются в течение 2 дней непрерывно. После завершения тестов результаты в основном сохраняются в папке на сервере. В другом прологовом файле есть предикат, который вызывается для обновления результатов в базе данных MYSQL. Код прост, я использую библиотеку odbc и просто вызываю odbc_* предикаты для подключения и обновления mysql путем выдачи прямых запросов.очистка кэша базы данных в SWI-Prolog

Реальная проблема заключается в:

  1. Если я пытаюсь вызвать предикат из того же окна Пролога, где тест только что завершен, я получаю сообщение об ошибке, как обновление к серверу БД. Хотя я не получаю никаких ошибок в соединении. Если я закрою сеанс этого пролога с помощью halt и закрываю все открытые прологовые окна, тогда откройте другой полный новый экземпляр Prolog и запустите предикат, и обновление будет хорошо.

У меня возникло ощущение, что в базе данных Prolog имеется ссылка на соединение с MySQL DB. Есть ли способ очистить базу данных в прологе, чтобы я мог запускать один и тот же предикат, не закрывая никаких существующих окон пролога?

Любые идеи оценили.

Спасибо.

ответ

1

Если вы открываете соединение, чем долгую обработку, MySQL может отбросить соединение между ними через определенный тайм-аут (который, я считаю, может быть настроен в my.cnf).

EDIT: swi-prolog имеет odbc_disconnect, который может быть использован для явного закрытия соединения после его использования и режима «сглаживания», который может использоваться для получения ранее открытого соединения при использовании odbc_open. В этом случае вы можете попробовать либо закрыть соединение после его использования. Вы также должны избегать использования псевдонима при открытии.

+0

Я знаю это. Но я снова открываю соединение в предикате обновления. Но я не уверен, почему обновление не состоится. – JPro

+0

Кажется, вы изменили свой вопрос, частично подтвердив мои подозреваемые в связи с отключением времени. Вы используете odbc_disconnect? В противном случае вы можете попробовать использовать odbc_current_connection, чтобы проверить свои соединения. Вы также должны проверить документацию odbc_connect на имя псевдонима соединения и «множественные» режимы открытия. – baol

Смежные вопросы