[Содержание] [Предыдущая] [Следующая] [Индекс]

Cursor

Объект server-side. Объект Cursor представляет курсор базы данных для определенного SQL выражения SELECT.

Объект server-side
Реализовано в LiveWire 1.0

Создание

Методом cursor объекта Connection или объекта database. Вы не вызываете конструктор Cursor.

Описание

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

Вы можете выполнять следующие задачи с объектом Cursor:

Вы можете использовать объект Cursor, чтобы настроить вид виртуальной таблицы, определяя какие столбцы и строки отобразить и как их отобразить. Объект Cursor автоматически не отображает данные, возвращенные в виртуальной таблице. Чтобы отобразить эти данные, Вы должны создать код HTML типа показанного в Примере 4 для метода cursor.

Указатель указывает текущую строку в объекте Cursor. Когда Вы создаете Cursor, указатель первоначально установлен перед первой строкой курсора. Метод next делает следующую строку в курсоре текущей строкой. Если выражение SELECT, используемое в вызове метода cursor, не возвращает ниодной строки, метод все равно создает объект Cursor. Однако, так как этот объект не имеет строк, первое использование метода next объекта, возвращает false. Ваше приложение должно проверить это условие.

Важно

Курсор базы данных не гарантирует порядок или позиционирование строк. Например, если Вы имеете модифицируемый курсор и добавляете строку к курсору, Вы не можете узнать, где эта строка появится в курсоре. Когда закончена работа с объектом Cursor, используйте close метод, чтобы закрыть ето и освободить память, которую он использует. Если Вы выпускаете подключение, которое имеет открытый курсор, двигатель времени выполнения ждет, пока курсор не будет закрыт перед фактическим освобождением подключения.

Если Вы явно не закрываете курсор методом close, двигатель времени выполнения JavaScript на сервере автоматически пробует закрыть все открытые курсоры, когда связанные объекты database или DbPool выходят из области видимости. Это может излишне связывать ресурсы системы. Это может также привести к непредсказуемым результатам.

Вы можете использовать свойство prototype класса Cursor, чтобы добавить свойство ко всем образцам Cursor. Если Вы делаете так, то добавление применяется ко всем образцам Cursor, выполняющимся во всех приложениях на Вашем сервере, не только в отдельном приложении, которое сделало изменение. Это позволяет Вам разворачивать возможности этого объекта для всего Вашего сервера.

Обратите внимение

Каждая Sybase таблица, которую Вы используете с курсором, должна иметь уникальный индекс.

Резюме Свойств

cursorColumn
Массив объектов, соответствующих столбцам в курсоре.
prototype
Позволяет добавление свойств к объекту Cursor.

Резюме Методов

close
Закрывает курсор и освобождает распределенную память.
columnName
Возвращает имя столбца в курсоре, соответствующего определенному номеру.
columns
Возвращает число столбцов в курсоре.
deleteRow
Удаляет текущую строку в определенной таблице.
insertRow
Вставляет новую строку в определенную таблицу.
next
Перемещает текущую строку к следующей строке в курсоре.
updateRow
Модифицирует записи в текущей строке определенной таблицы в курсоре.

Свойства

Этот раздел описывает свойства объектов cursor.

Свойства объектов cursor изменяются от образца к образцу. Каждый объект Cursor имеет свойство для каждого именованного столбца в курсоре. Другими словами, когда Вы создаете курсор, он приобретает свойство для каждого столбца в виртуальной таблице, как определено выражением SELECT.

ПРИМЕЧАНИЕ: В отличие от других свойств в JavaScript, свойства cursor соответствующие именам столбцов не чувствительны к регистру, потому что SQL не чувствителен к регистру и некоторые базы данных не чувствительны к регистру.
Вы можете также ссылаться к свойствам объекта Cursor как к элементам массива. 0-ой элемент массива соответствует первому столбцу, 1-ый элемент массива соответствует второму столбцу, и так далее.

Выражения SELECT могут восстанавливать значения, которые не являются столбцами в базе данных, типа значений агрегатов и SQL выражений. Вы можете отображать эти значения, используя индекс массива свойств курсора для значения.

cursorColumn

Массив объектов, соответствующих столбцам в курсоре.

Свойство объекта Cursor
Реализовано в LiveWire 1.0

Примеры

Пример 1: Использование заголовков столбца как свойства курсора. Следующий пример создает объект customerSet типа Cursor, содержащий строки id, name и city из таблицы customer. Метод next перемещает указатель к первой строке курсора. Столбцы id, name и city стали свойствами customerSet.id, customerSet.name и customerSet.city объекта cursor. Так как указатель находится в первой строке курсора, метод write показывает значения этих свойств для первой строки.

// Создаем объект Cursor
customerSet = database.cursor("SELECT id, name, city FROM customer")
// Переходим к первой строке
customerSet.next()
write(customerSet.id + "<BR>")
write(customerSet.name + "<BR>")
write(customerSet.city + "<BR>")
// Закрываем курсор
customerSet.close()
Этот запрос мог бы возвратить виртуальную таблицу, содержащую следующие строки:

1 John Smith Anytown 
2 Fred Flintstone Bedrock
3 George Jetson Spacely
Пример 2: Выполнение итераций со свойствами курсора. В этом примере, массив свойств объекта cursor используется в выражении for, чтобы выполнить итерации над каждым столбцом курсора customerSet.

// Создаем объект Cursor
customerSet = database.cursor("SELECT id, name, city FROM customer")
// Переходим к первой строке
customerSet.next()
// Начало цикла for
for ( var i = 0; i < customerSet.columns(); i++) {
write(customerSet[i] + "<BR>") }
// Закрываем курсор
customerSet.close()
Так как инструкция next перемещает указатель к первой строке, предшествующий код, показывает значения, подобные следующему:

1
John Smith
Anytown
Пример 3. Использование свойств курсора с составным выражением. В этом примере, курсор salarySet содержит столбец, созданный агрегатной функцией MAX.

salarySet = database.cursor("SELECT name, MAX(salary) FROM employee")
Из за того, что составной столбец не имеет имени, Вы должны использовать индекс, следующим образом:

write(salarySet[1])

prototype

Представляет прототип для этого класса. Вы можете использовать прототип, чтобы добавлять свойства или методы ко всем образцам класса. Для информации о прототипах, смотрите Function.prototype.

Свойство объекта Cursor
Реализовано в LiveWire 1.0

Методы

close

Закрывает курсор и освобождает распределенную память.

Метод объекта Cursor
Реализовано в LiveWire 1.0

Синтаксис

close()

Параметры

Нет.

Возвращает

0, если запрос был успешен; иначе, ненулевой код состояния, основанный на любом сообщении об ошибках, переданном базой данных. Если метод возвращает ненулевой код состояния, используйте связанные методы majorErrorCode и majorErrorMessage, чтобы интерпретировать причину ошибки.

Описание

Метод close закрывает курсор или набор результатов и освобождает используемую память. Если Вы явно не закрываете курсор или набор результатов методом close, двигатель времени выполнения JavaScript на сервере автоматически закрывает все открытые курсоры и наборы результатов, когда соответствующий объект client выходит из области видимости.

Примеры

Следующий пример создает курсор rentalSet, выполняет некоторые операции с ним, и затем закрывает его методом close.

// Создаем объект Cursor
rentalSet = database.cursor("SELECT * FROM rentals")
// Выполняем операции с курсором
cursorOperations()
// Закрываем курсор
err = rentalSet.close()

columnName

Возвращает имя столбца в курсоре, соответствующего определенному номеру.

Метод объекта Cursor
Реализовано в LiveWire 1.0

Синтаксис

columnName (n)

Параметры

n
Нуль-основанное целое число, соответствующее столбцу в запросе. Первый столбец в наборе результатов 0, второй 1, и так далее.

Возвращает

Имя столбца.

Наборы результатов для Informix и DB2 сохраненных процедур не имеют именованных столбцов. Не используйте этот метод при соединении с этеми базами данных. В этом случае Вы должны всегда обращаться к столбцам набора результатов по индексу.

Если Ваше выражение SELECT использует подстановочный знак (*), чтобы выбрать все столбцы в таблице, метод columnName не гарантирует порядок, в котором он присваивает номера столбцам. То есть предположим, что Вы имеете это выражение:

custs = connobj.cursor ("select * from customer");
Если таблица customer имеет 3 столбца, ID, NAME и CITY, Вы не можете сказать раньше срока, который из этих столбцов соответствует custs.columnName(0). (Конечно, Вам гарантируют, что последовательные вызовы columnName имеют тот же самый результат.) Если порядок имеет значение для Вас, Вы можете взамен жестко задать имена столбцов в выражении SELECT, как в следующем выражении:

custs = connobj.cursor ("select ID, NAME, CITY from customer");
С этим выражением, custs.columnName(0) равно ID, custs.columnName(1) равно NAME, и custs.columnName(2) равно CITY.

Примеры

Следующий пример присваивает имя первого столбца курсора customerSet переменной header:

customerSet=database.cursor(SELECT * FROM customer ORDER BY name)
header = customerSet.columnName(0)

columns

Возвращает число столбцов в курсоре.

Метод объекта Cursor
Реализовано в LiveWire 1.0

Синтаксис

columns()

Параметры

Нет.

Возвращает

Число именованных и неименованных столбцов.

Примеры

Смотрите Пример 2 объекта Cursor для примера использования метода columns с массивом cursorColumn.

Следующий пример возвращает число столбцов в курсоре custs:

custs.columns()

deleteRow

Удаляет текущую строку в определенной таблице.

Метод объекта Cursor
Реализовано в LiveWire 1.0

Синтаксис

deleteRow (table)

Параметры

table
Строка, определяющая имя таблицы, для удаления строки.

Возвращает

0, если запрос был успешен; иначе, ненулевой код состояния, основанный на любом сообщении об ошибках, переданном базой данных. Если метод возвращает ненулевой код состояния, используйте связанные методы majorErrorCode и majorErrorMessage, чтобы интерпретировать причину ошибки.

Описание

Метод deleteRow использует модифицируемый курсор, чтобы удалить текущую строку из определенной таблицы. Смотрите Cursor для информации о создания модифицируемого курсора.

Примеры

В следующем примере, метод deleteRow удаляет заказчика из база данных customer. Метод cursor создает курсор customerSet, содержащий одну строку; значение для customer.ID передается как свойство объекта request. Метод next перемещает указатель на единственную строку в курсоре, а метод deleteRow удаляет строку.

database.beginTransaction()
   customerSet = database.cursor("select * from customer where
      customer.ID = " + request.ID, true)
   customerSet.next()
   statusCode = customerSet.deleteRow("customer")
   customerSet.close()
   if (statusCode == 0) {
      database.commitTransaction() }
   else {
      database.rollbackTransaction() }
В этом примере, метод deleteRow устанавливает значение statusCode, чтобы указать успешен ли deleteRow или терпит неудачу. Если statusCode равно 0, метод успешен, и транзакция совершается; иначе, транзакция прокручивается обратно.

insertRow

Вставляет новую строку в определенную таблицу.

Метод объекта Cursor
Реализовано в LiveWire 1.0

Синтаксис

insertRow (table)

Параметры

table
Строка, определяющая имя таблицы, для вставки строки.

Возвращает

0, если запрос был успешен; иначе, ненулевой код состояния, основанный на любом сообщении об ошибках, переданном базой данных. Если метод возвращает ненулевой код состояния, используйте связанные методы majorErrorCode и majorErrorMessage, чтобы интерпретировать причину ошибки.

Описание

Метод insertRow использует модифицируемый курсор, чтобы вставить строку в определенную таблицу. Смотрите метод cursor для информации о создании модифицируемого курсора.

Расположение вставленной строки зависит от библиотеки продавцов базы данных. Если Вы должны получить строку после вызова метода insertRow, Вы должны сначала закрыть существующий курсор и затем открыть новый курсор.

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

Метод insertRow вставляет null значение в любые столбцы таблицы, которые не появляются в курсоре.

Метод insertRow возвращает код состояния, основанный на сообщении сервера баз данных, чтобы указать, завершился ли метод успешно. Если успешно, метод возвращает 0; иначе, он возвращает ненулевое целое число, чтобы указать причину его неудачи. Смотрите Writing Server-Side JavaScript Applications для объяснения кодов состояния.

Примеры

В некоторых приложениях, типа приложения с арендной платой за видео, муж, жена и дети могли бы иметь общий номер счета, но быть перечисленными под различными именами. В этом примере, пользователь только добавил имя к таблице accounts и хочет добавить имя супруги к этому же счету.

customerSet = database.cursor("select * from customer", true)
x=true
while (x) {
   x = customerSet.next() }
customerSet.name = request.theName
customerSet.insertRow("accounts")
customerSet.close()
В этом примере, метод next переходит к последней строке в таблице, которая содержит последний добавленный счет. Значение theName передано объекту request и присвоено столбцу name в курсоре customerSet. Метод insertRow вставляет новую строку в конец таблицы. Значение столбца name в новой строке равно значению theName. Так как приложение использовало метод next для перемещения, значение каждого другого столбца в новой строке такое же, как и значение в предыдущей строке.

next

Перемещает текущую строку к следующей строке в курсоре.

Метод объекта Cursor
Реализовано в LiveWire 1.0

Синтаксис

next()

Параметры

Нет.

Возвращает

False, если текущая строка это последняя строка; иначе, true.

Описание

Первоначально, указатель (или текущая строка) для курсора или набора результатов установлен перед первой возвращенной строкой. Используйте метод next, чтобы перемещать указатель по записям в наборе результатов или курсоре. Этот метод перемещает указатель на следующую строку и возвращает истину пока имеется другая доступная строка. Когда курсор или набор результатов достигает последней строки, метод возвращает false. Обратите внимение, что если курсор пуст, этот метод всегда возвращает false.

Примеры

Пример 1. Этот пример использует метод next, чтобы перейти к последней строке в курсоре. Переменная x инициализирована в true. Когда указатель находится в последней строке курсора, метод next возвращает false и завершает цикл while.

customerSet = database.cursor("select * from customer", true)
x = true
while (x) {
   x = customerSet.next() }
Пример 2. В следующем примере, курсор rentalSet содержит столбцы, с именами videoId, rentalDate и dueDate. Метод next вызывается в цикле while, который выполняет итерации над каждой строкой в курсоре. Когда указатель находится на последней строке в курсоре, метод next возвращает false и завершает цикл while.

Этот пример показывает три столбца курсора в таблице HTML:

<SERVER>
// Создаем объект Cursor
rentalSet = database.cursor("SELECT videoId, rentalDate, returnDate
   FROM rentals")
</SERVER>
// Создаем таблицу HTML
<TABLE BORDER>
<TR>
<TH>Video ID</TH>
<TD>Rental Date</TD>
<TD>Due Date</TD>
</TR>
<SERVER>
// Выполняем итерации с каждой строкой в курсоре
while (rentalSet.next()) {
</SERVER>
// Отображаем значения курсора в таблице HTML
   <TR>
   <TH><SERVER>write(rentalSet.videoId)</SERVER></TH>
   <TD><SERVER>write(rentalSet.rentalDate)</SERVER></TD>
   <TD><SERVER>write(rentalSet.returnDate)</SERVER></TD>
   </TR>
// Завершаем цикл while
<SERVER>
}
</SERVER>
// Конец таблицы
</TABLE>

updateRow

Модифицирует записи в текущей строке определенной таблицы в курсоре.

Метод объекта Cursor
Реализовано в LiveWire 1.0

Синтаксис

updateRow (table)

Параметры

table
Строка, определяющая имя таблицы, для модификации.

Возвращает

0, если запрос был успешен; иначе, ненулевой код состояния, основанный на любом сообщении об ошибках, переданном базой данных. Если метод возвращает ненулевой код состояния, используйте связанные методы majorErrorCode и majorErrorMessage, чтобы интерпретировать причину ошибки.

Описание

Метод updateRow позволяет Вам использовать значения в текущей строке модифицируемого курсора, чтобы изменить таблицу. Смотрите метод cursor для информации о создании модифицируемого курсора. Перед выполнением updateRow, Вы должны выполнить по крайней мере один раз next с курсором, так чтобы текущая строка установилась на первой строке.

Присвойте значения столбцам в текущей строке курсора, и затем используйте метод updateRow, чтобы модифицировать текущую строку таблицы, определенной параметром table. Значения столбцов, которые явно не назначены, не изменяются методом updateRow.

Метод updateRow возвращает код состояния, основанный на сообщении сервера баз данных, чтобы указать, завершился ли метод успешно. Если успешно, метод возвращает 0; иначе, он возвращает ненулевое целое число, чтобы указать причину его неудачи. Смотрите Writing Server-Side JavaScript Applications для объяснения индивидуальных кодов состояния.

Примеры

Этот пример использует updateRow, чтобы модифицировать столбец returndate таблицы rentals. Значения customerID и videoID передаются методу cursor как свойства объекта request. Когда объект videoReturn типа Cursor открывается, метод next переходит к единственной возвращенной записи и модифицирует значение в поле returnDate.

// Создаем курсор, содержащий арендованное видео
videoReturn = database.cursor("SELECT * FROM rentals WHERE
   customerId = " + request.customerID + " AND
   videoId = " + request.videoID, true)
// Устанавливаем указатель на первой строке курсора
videoReturn.next()
// Присваиваем текущую дату столбцу returndate
videoReturn.returndate = today
// Модифицируем строку
videoReturn.updateRow("rentals")


[Содержание] [Предыдущая] [Следующая] [Индекс]

Последняя Модификация: 10/31/97 16:36:13


Права © 1997 Netscape Communications Corporation



Все мессаги сюда:yanich@inbox.ru
Hosted by uCoz