MySQL & mSQL


              

По всему классу Connection разбросаны


Другие методы класса Connection

По всему классу Connection разбросаны два вспомогательных метода, IsConnected() и GetError(). Проверить состояния соединения просто — достаточно посмотреть значение атрибута connection. Оно должно быть не NULL для MySQL или отличным от -1 для mSQL. Напротив, сообщения об ошибках требуют некоторых пояснений.

Извлечение сообщений об ошибках для mSQL просто и безыскусно, нужно лишь использовать значение глобальной переменной msqlErrMsg . Ее значение точно совпадает с тем, что возвращает от mSQL метод GetError(). С MySQL дело обстоит несколько сложнее. При обработке любых сообщений об ошибках необходимо учитывать многопоточность. В многопоточной среде обработка ошибок осуществляется путем получения сообщений об ошибках с помощью функции mysql_error() . В примере 13-7 показаны обработка ошибок для MySQL и mSQL в методе GetError(), а также проверка соединения в методе IsConnected() .

Пример 13-7. Чтение сообщений об ошибках и другие вспомогательные задачи класса Connection

int Connection::GetAffectedRows() {

return affected_rows; }

char 'Connection::GetError() {

#if defined(HAS_MSQL)

return msqlErrMsg:

#elif defined(HAS_MYSQL)

if( IsConnected() ) {

return mysql_error(connection); }

else {

return mysql_error(&mysql); }

#else

#error Нет соединения с базой данных,

#endif }

int Connection::IsConnected() {

#if defined(HAS_MSQL)

return !(connection < 0);

#elif defined(HAS_MYSQL)

return !(iconnection);

#else

#error Нет соединения с базой данных,

#endif

)

Проблемы при обработке ошибок

Хотя обрабатывать ошибки, как это описано выше, несложно благодаря инкапсуляции обработки в простой вызов API в классе Connection , следует остерегаться некоторых потенциальных проблем. Во-первых, при работе с mSQL обработка ошибок осуществляется глобально в пределах приложения. Если приложение поддерживает несколько соединений, значение msqlErrMsg относится к последней ошибке последнего вызова какой-либо функции mSQL API. Следует также учесть, что хотя mSQL - однопоточное приложение, можно создавать многопоточные приложения, использующие mSQL, но проявлять крайнюю осторожность при извлечении сообщений об ошибках. Именно, необходимо написать собственный API, корректно работающий с потоками поверх mSQL С API, который копирует сообщения об ошибках и связывает их с соответствующими соединениями.


Содержание  Назад  Вперед