Оглавление | Назад | Вперёд | Индекс

Глава 12
Обработка Ошибок LiveWire

В этой главе рассмотрены типы ошибок, которые могут появиться при работе с реляционными БД.

В главе имеются следующие разделы:

Проверка Ошибочных Условий


При написании приложения на языке JavaScript Вы должны знать о различных ошибках. В тех случаях, когда Вы используете LiveWire Database Service для взаимодействия с реляционной БД, ошибки могут возникать по разным причинам. Например, SQL-операторы могут не выполняться из-за ограничений ссылочной целостности/referential integrity, потери привилегий доступа, блокировки записи или таблицы в многопользовательской БД и т.д. Если акция терпит неудачу, сервер БД возвращает сообщение об ошибке с указанием причины.

Ваш код должен проверять наличие ошибок и обрабатывать их соответствующим образом.

Return-Значения


Return-значение методов объектов LiveWire может указывать, имеется ошибка или нет. Методы могут возвращать значения различных типов. В зависимости от типа Вы можете получать различную информацию о возможных ошибках.

Число


Если метод возвращает число, return-значение может представлять число либо статус-код. Например, Cursor.columns возвращает количество столбцов в курсоре, а Cursor.updateRow возвращает число, обозначающее наличие или отсутствие ошибки.

Методы Cursor.columns и Resultset.columns возвращают числовое значение.

Следующие методы возвращают число, обозначающее статус-код:

Connection.beginTransaction
Connection.commitTransaction
Connection.execute
Connection.majorErrorCode
Connection.minorErrorCode
Connection.release
Connection.rollbackTransaction
Connection.SQLTable
Cursor.close
Cursor.deleteRow
Cursor.insertRow
Cursor.updateRow
database.beginTransaction
database.connect
database.commitTransaction
database.disconnect
database.execute
database.majorErrorCode
database.minorErrorCode
database.rollbackTransaction
database.SQLTable
database.storedProcArgs
DbPool.connect
DbPool.disconnect
DbPool.majorErrorCode
DbPool.minorErrorCode
DbPool.storedProcArgs
Resultset.close Stproc.close

Если числовое return-значение метода указывает статус-код, 0 означает успешное выполнение, а ненулевое число указывает на ошибку. Если статус-код ненулевой, Вы можете использовать методы majorErrorCode и majorErrorMessage ассоциированного объекта Connection, database или DbPool для того, чтобы найти информацию об ошибке. В некоторых случаях методы minorErrorCode и minorErrorMessage предоставляют дополнительную информацию об ошибке. О return-значениях этих методов см. "Методы Работы с Ошибками".

Объект


Если метод возвращает объект, он может быть либо реальным объектом, либо null. Если метод возвращает null, возможно, возникла ошибка JavaScript. В большинстве случаев, если ошибка возникла в БД, метод возвращает верный объект, но программа устанавливает код ошибки.

Глобальная функция blob возвращает объект. Кроме того, следующие методы также возвращают объект:

Connection.cursor
Connection.storedProc
database.cursor
database.storedProc
DbPool (constructor)
DbPool.connection
Stproc.resultSet

Создаёте ли Вы курсор, результирующий набор или хранимую процедуру, Вы должны проверять и существование созданного объекта, и возможное наличие кода ошибки. Вы можете использовать методы majorErrorCode и majorErrorMessage для тестирования ошибки.

Например, Вы можете создать курсор и проверить его корректность кодом такого вида:

// Создаётся Cursor-объект.
custs = connobj.cursor ("select id, name, city
   from customer order by id");
// Прежде чем продолжить, убедитесь, что возвращён реальный курсор // и что нет ошибки БД.
if ( custs && (connobj.majorErrorCode() == 0) ) {
   // Получить первый ряд.
   custs.next();
   // ... процессинг рядов курсора ...    //Закрыть курсор.
   custs.close();
}
else
   // ... обработка ошибок ...

Булево Значение


Следующие методы возвращают Булевы значения:

Connection.connected
Cursor.next
database.connected
DbPool.connected
Resultset.next

Если метод возвращает Boolean-значение, true обычно указывает на успешное выполнение, в то время как false указывает на некоторое другое состояние. Return-значение false не означает реальной ошибки; оно может означать и условие успешного завершения.

Например, Connection.connected возвращает false для указания на то, что Connection -объект в данное время не соединён. Это может означать, что ошибка возникла при создании Connection -объекта или что ранее использованное соединение было намеренно разорвано. Эти события не являются ошибками метода connected. Если ошибка возникла при создании объекта, Ваш код должен отлавливать ошибку в работе этого метода. Если соединение было разорвано, Вы можете установить его вновь.

Второй пример - Cursor.next возвращает false, когда Вы ряды курсора закончились. Если оператор SELECT, используемый для создания Cursor -объекта, находит таблицу, но не находит столбцы, соответствующие условию оператора SELECT, создаётся пустой курсор. При первой Вашей попытке вызова метода next для этого курсора он возвращает false. Ваш код должен учитывать такую возможность.

Строка


Если метод возвращает строку, Вы обычно не получаете сообщения об ошибке. Если, однако, метод возвращает null, проверьте ассоциированный error-метод.

Следующие методы возвращают строку:

Connection.majorErrorMessage
Connection.minorErrorMessage
Cursor.columnName
database.majorErrorMessage
database.minorErrorMessage
DbPool.majorErrorMessage
DbPool.minorErrorMessage
Resultset.columnName

Void


Некоторые методы не возвращают значение. Вы не можете ничего сказать о возможных ошибках в работе этих методов. Следующие методы не возвращают значения:

Connection.release
Cursor.close
database.disconnect
DbPool.disconnect
Resulset.close

Методы Работы с Ошибками


Как уже было сказано, многие методы возвращают числовой статус-код. Если метод возвращает статус-код, может иметься и соответствующие код ошибки и сообщение от сервера БД. LiveWire имеет четыре метода для объектов Connection, DbPool и database для доступа к error-кодам и сообщениям БД.

Вот эти методы:

Результаты, возвращаемые этими методами, зависят от используемого сервера БД и статус-кода БД. В большинстве случаев Вам нужно рассматривать только наивысший error-код или сообщение об ошибке, чтобы понять суть ошибки. Меньшие error-код и сообщение используются только в некоторых ситуациях.

ПРИМЕЧАНИЕ: Вызов другого метода объектов Connection, DbPool или database может зачистить/reset error-коды и сообщения. Чтобы исключить потерю информации, не забудьте проверить эти методы, перед тем как продолжить.

После получения сообщения об ошибке ваше приложение может вывести сообщение пользователю. Ваше сообщение может включать строку, возвращённую majorErrorMessage или minorErrorMessage, или число, возвращённое majorErrorCode или minorErrorCode. Дополнительно можно обработать число или строку, перед тем как вывести их.

При обсчёте строки, возвращённой majorErrorMessage и minorErrorMessage, LiveWire возвращает строку поставщика БД с присоединённым дополнительным текстом. Детальную информацию о возвращаемых значениях см. в описаниях этих методов в книге Серверный JavaScript. Справочник .

Статус-Коды


В следующей таблице дан список статус-кодов, возвращаемых различными методами. Netscape рекомендует не использовать эти значения напрямую. Вместо этого, если метод возвращает ненулевое значение, используйте ассоциированные методы majorErrorCode и majorErrorMessage для определения конкретной ошибки.

Таблица 12.1  Статус-Коды методов LiveWire
Статус-Код Пояснение Статус-Код Пояснение

0

Нет ошибки

14

Null-параметр

1

Недостаточно памяти

15

Объект database не найден

2

Объект не был инициализирован

16

Отсутствует необходимая информация

3

Ошибка конвертации типов

17

Объект не поддерживает несколько читателей

4

БД не зарегистрирована

18

Объект не поддерживает удаление

5

Ошибка, выданная сервером

19

Объект не поддерживает вставку

6

Сообщение сервера

20

Объект не поддерживает обновление

7

Ошибка в библиотеке поставщика

21

Объект не поддерживает обновление

8

Потеря соединения

22

Объект не поддерживает индексы

9

Конец fetch (не смог перевести - прим. перев.)

23

Объект не может быть уничтожен

10

Неверное использование объекта

24

Предоставлено некорректное соединение

11

Столбец не существует

25

Объект не поддерживает привилегии

12

Неверное позиционирование внутри объекта (нарушение границ)

26

Объект не поддерживает курсоры

13

Неподдерживаемая возможность

27

Невозможно открыть

Оглавление | Назад | Вперёд | Индекс

Дата последнего обновления: 29 сентября 1999 г.

© Copyright ╘ 1999 Sun Microsystems, Inc. Некоторая часть Copyright ╘ 1999 Netscape Communications Corp. Все Права Зарезервированы.