5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения...


5. ResultSet (набор данных).


Обзор.


ResultSet содержит все строчки, удовлетворяющие условиям в SQL - выражении и предоставляет доступ к данным в этих строчках посредствеом набора get - способов, которые организуют доступ к колонкам текущей строчки. Способ ResultSet 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения....next употребляется для перемещения к последующей строке ResultSet, делая ее текущей.


Набор данных результата (result set) является таблицей с заголовками колонок и соответственных значений, возвращенных запросом. К примеру, если мы имеем запрос 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... SELECT a, b, c FROM Table1, то набор результата будет в последующей форме:


a

b

c

12345

Cupertino

CA

83472

Redmond

WA

83492

Boston

MA


Последующий кусок кода показывает выполнение SQL - запроса, который возвращает коллекцию строк, в какой колонка 1 - это int, колонка 2 - String и 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... колонка 3 - массив байтов:


java.sql.Statement stmt = conn.createStatement ();

ResultSet r = stmt.executeQuery («SELECT a, b, c FROM Table1»);

while (r.next ())

{

// Напечатать значения в текущей строке.

int i = r.getInt («a»);

String 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... s = r.getString («b»);

float f = r.getFloat («c»);

System.out.println («ROW = « + i + « « + s + « « + f);

}


^ Строчки и курсоры.


ResultSet содержит т.н. курсор, который показывает на текущую строчку 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... данных. Всякий раз, когда производится способ next, курсор перемещается на одну строчку вниз. Вначале курсор спозиционирован перед первой строчкой, и 1-ый вызов next премещает его на первую строчку (она становится текущей). С каждым 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... удачным вызовом next курсор перемещается вниз на одну строчку, начиная с самой верхней в ResultSet.

Курсор сохраняется до того времени, пока не закроется объект ResultSet либо его родительский объект Statement.


В SQL 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... курсор для результирующей таблицы имеет имя. Если БД поддерживает позиционированные обновления либо позиционированные удаления, то командам обновления либо удаления можно передать в качестве параметра имя курсора. Это имя может быть получено 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... при помощи вызова getCursorName.


Заметим, что не все СУБД поддерживают позиционированные обновления либо удаления. Чтоб выяснить, поддерживает ли данное соединение эти операции либо нет, можно вызвать способы DatabaseMetaData.supportsPositionedDelete и supportsPositionedUpdate.


Колонки.


Способы 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... getXXX предоставляют доступ к значениям в колонках в текущей строке. В границах одной строчки значения могут быть считаны в любом порядке, но ради обеспечения большей сопоставимости рекомендуется считывать их попорядку слева вправо и 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... делать это только один раз.


Для указания колонки можно использовать или ее имя, или ее номер. К примеру, если 2-ая колонка объекта ResultSetrs именуется «title» и хранит строковое значение, то извлечь его 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... можно одним из 2-ух методов:


String s = rs.getString («title»);

String s = rs.getString (2);


Имейте ввиду, что колонки нумеруются слева вправо, начиная с 1. Имена колонок в вызове способов getXXX нечувствительны к регистру букв 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения....


Вариант с внедрение имен колонок существует для того, чтоб юзер задавал способам getXXX те же имена колонок, что он употребляет в запросе. Если выражение select не показывает имена колонок (к примеру «select 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... * from table1» либо в случаях, когда колонка рассчитывается) должны употребляться номера колонок. В этих случаях юзер не может знать наверное имена колонок.


В нектороых случаях имена 2-ух колонок могут совпадать 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения.... Тогда при использовании имен колонок в способах getXXX ворачивается значение первой подходящей колонки. Таким макаром, чтоб считать значение других колонок с таким же именованием, нужно использовать индексы колонок. Не считая того, внедрение индексов малость 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... эффективнее.


Информацию о колонках в ResultSet можно получить с помощтю вызова ResultSet.getMetaData. Возвращаемый объект ResultSetMetaData содержит информацию о количестве, типах и свойствах колонок объекта ResultSet. Если понятно имя колонки, но не 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... ее индекс, то для поиска номера колонки можно использовать способ findColumn.


^ Типы данных и их преобразование.


Способы getXXX пробуют сконвертировать низкоуровневые данные в типы данных языка Java. К примеру, способ 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... если способ getXXX - это getString и тип данных в БД - VARCHAR, драйвер JDBC сконвертирует VARCHAR в объект String. Возвращаемым из способа getString значением будет Java - объект String.


Последующая таблица указывает, какие 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... типы данных разные способы getXXX могут считывать и какие JDBC - типы (SQL - типы) рекомендуются для этих способов. Символ x значит, что способ getXXX подходит к соответственному типу данных; символ X значит рекомендуемый 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... способ getXXX для данного типа. К примеру, значение LONGVARCHAR можно извлечь хоть каким из способов getXXX не считая getBytes и getBinaryStream, но рекомендуется использовать способы getAsciiStream и getUnicodeStream. Способ getObject возвращает хоть какой тип 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... данных как Object и употребляется в тех случаях, когда соответственный низкоуровневый тип данных является специфическим для данной СУБД либо когда приложению нужно принять хоть какой тип данных.


^ Внедрение способов ResultSet 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения....getXXX при доступе к разным типам данных SQL.

«x» значит, что способ getXXX может быть применен,
«X» значит, что соответственный способ рекомендуется использовать для этого типа данных.





tinyint

smallint

integer

bignt

real

float

double

decimal

numeric

bit

char

varchar

longvarchar

binary

varbinary

longvarbinary

date

time

timestamp

getByte

X

x

x

x

x

x

x

x

x

x

x

x

x



















getShort

x

X

x

x

x

x

x

x

x

x

x

x

x



















getInt

x

x

X

x

x

x

x

x

x

x

x

x

x



















getLong

x

x

x

X

x

x

x

x

x

x

x

x

x



















getFloat

x

x

x

x

X

x

x

x

x

x

x

x

x



















getDouble

x

x

x

x

x

X

X

x

x

x

x

x

x



















getBigDecimal

x

x

x

x

x

x

x

X

X

x

x

x

x



















getBoolean

x

x

x

x

x

x

x

x

x

X

x

x

x



















getString

x

x

x

x

x

x

x

x

x

x

X

X

x

x

x

x

x

x

x

getBytes








































X

X

x










getDate































x

x

x










X




x

getTime































x

x

x













X

x

getTimestamp































x

x

x










x




X

getAsciiStream































x

x

X

x

x

x










getUnicodeStream































x

x

X

x

x

x










getBinaryStream








































x

x

X










getObject

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x


^ Внедрение потоков для очень огромных значений.


При 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... помощи ResultSet может быть получать очень огромные данные типа LONGVARBINARY либо LONGVARCHAR. Способы getBytes и getString возвращают эти данные в виде 1-го огромного кусочка (прямо до пределов, которые можно выяснить при помощи способа 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... Statement.getMaxFieldSize). Все же, возможно окажется удобнее считывать очень огромные данные маленькими кусочками. Это делается при помощи потоков (java.io.InputStream), которые ворачиваются некими способами ResultSet. Направьте внимание на 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... то, что к этим потокам нужно обращаться сходу, потому что они будут закрыты при последующем вызове getXXX объекта ResultSet. (Такое поведение диктуется низкоуровневой реализацией доступа к огромным двоичным объектам)


В JDBC API 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... есть три отдельных способа для получения потоков:

getBinaryStream возвращает поток байтов «как есть», без какого - или подготовительного преобразования.

getAsciiStream возвращает поток, состоящий из однобайтовых ASCII - знаков.

getUnicodeStream возвращает поток двухбайтных знаков Unicode.


Эти потоки отличаются 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... от обыденных потоков Java, которые возвращают нетипизированные байты, и могут, к примеру, быть ASCII - либо Unicode - знаками.


Последующий пример показывает внедрение getAsciiStream:

java.sql.Statement stmt = con.createStatement ();

ResultSet 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... r = stmt.executeQuery («SELECT x FROM Table2»);

// Сейчас считываем колонку 1 результатов кусочками по 4 K:

byte buff = new byte[4096];

while (r.next ()) {

Java.io.InputStream fin = r.getAsciiStream (1);

for (;;)

{

int size = fin.read (buff 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения...);

if (size == - 1)

{

// в конце потока

break;

}

// Отослать заполненный буфер в ASCII - поток:

output.write (buff, 0, size);

}

}


^ Значения NULL в результатах.


Для того, чтоб найти, равно ли значение колонки NULL либо нет, нужно 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... поначалу считать значение колонки, а потом использовать способ ResultSet.wasNull для выяснения этого факта. Значение true значит, что считанное значение равно NULL.


Значение же, возвращаемое в данном случае способом ResultSet.getXXX, равно:

null для тех 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... из способов getXXX, которые возвращают объекты (такие способы, как getString, getBigDecimal, getBytes, getDate, getTime, getTimestamp, getAsciiStream, getUnicodeStream, getBinaryStream, getObject).

нулевое значение для getByte, getShort, getInt, getLong, getFloat, and getDouble 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения....

false в случае getBoolean.


Необязательные либо множественные наборы результатов (Result Sets).


Обычно SQL - запросы производятся или способом executeQuery (который возвращает единственный ResultSet), или executeUpdate (который может употребляться для всех запросов на изменение БД и 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... которые возвращают количество модифицированных строк). Все же, в неких случаях приложению заранее непонятно, вернет ли данный запрос итог либо нет. Не считая того, некие хранимые процедры могут вернуть несколько наборов данных и / либо 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... счетчиков обновления.


На этот случай в JDBC есть механизм, когда приложение может обрабатывать произвольную коллекцию наборов результатов либо счетчиков обновления. Этот механизм основан на вызове способа execute и следующем вызове 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... 3-х других способов getResultSet, getUpdateCount и getMoreResults. Эти способы позволяют приложению получать результаты запроса поочереди и для каждого результата определять, является ли он набором данных либо счетчиком обновлений.


Нет никакой необходимости 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... закрывать ResultSet; это делается автоматом родительским объектом Statement, когда последний запирается, производится повторно либо употребляется для извлечения последующего результата в последовательности нескольких результатов.


^ 6. Драйвер моста JDBC - ODBC.


Мост JDBC - ODBC.


Там, где 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... это может быть, используйте Pure Java JDBC driver заместо моста меду JDBC и ODBC, как как в этот случай не просит дополнительной конфигурации ODBC на клиенте. Не считая того, Вы избавлены от возможной способности краха 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... Java VM из - за ошибки в ODBC.


^ Что такое мост JDBC - ODBC?


Мост JDBC - ODBC - это драйвер JDBC, реализующий операции JDBC методом трансляции их в операции ODBC. Исходя из 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... убеждений ODBC - это обыденное приложение. Мост таким макаром предоставляет JDBC - интерфейс к хоть каким СУБД, для которых доступен ODBC - драйвер. Мост реализован в виде пакета sun.jdbc.odbc и содержит native library для доступа к 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... ODBC. Этот мост - совместная разработка Intersolv и JavaSoft.


^ Какая версия ODBC поддерживается?


Мост поддерживает ODBC 2.x. Это та версия, которую многие ODBC - драйверы в текущее время поддерживают. Мост работает также 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... с драйверами ODBC 3.x.


^ Реализация моста.


Мост реализован на Java и употребляет Java native способы для вызова ODBC.


Установка.


Мост устанавливается автоматом вкупе с JDK как пакет sun.jdbc.odbc. См. информацию 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... от поставщика Вашего ODBC - драйвера по установке и конфигурации ODBC. Для моста не требуется особое конфигурирование.


^ Внедрение моста.


Мост употребляется для открытия JDBC - соединения с внедрением URL с подпротоколом odbc. См. ниже примеры URL 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения.... Перед установлением соединения должен быть загружен класс драйвера моста sun.jdbc.odbc.JdbcOdbcDriver, т.е. или добавлен в свойство класса java.lang.System с именованием jdbc.drivers, или очевидно быть 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... загруженным при помощи загрузчика Java - классов. Очевидная загрузка осуществляется последующим куском кода:

Class.forName (sun.jdbc.odbc.JdbcOdbcDriver);

При загрузке класса происходит регистрация нового драйвера моста в JDBC.


^ Внедрение моста из 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... апплета.


Pure Java JDBC - драйверы (тип 4, см. intro.doc.html) отлично работают с апплетами. Драйвер же моста не прекрасно работает в апплетах.


^ Многие навигаторы не поддерживают мост.


Потому что мост - это необязательная компонента JDK 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения..., он может быть исключен в интернет - навигаторе. И даже если он имеется, то его использовать могут только доверяемые апплеты (т.е. те, которым разрешено писать в файлы). Это изготовлено с целью сохранить 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... изоляцию апплетов от наружной среды. И даже если апплет доверяемый, нужно на каждом клиентском месте изменить ODBC.


^ Что представляет собой JDBC - URL для моста?


Драйвер моста употребляет подпротокол odbc. URL - ы для этого 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... подпротокола имеют последующий вид:


jdbc:odbc:[ = ]*


К примеру:


jdbc:odbc:sybase

jdbc:odbc:mydb;UID = me;PWD = secret

jdbc:odbc:ora123;Cachesize = 300


Отладка.


Мост предоставляет способности расширенной трассировки в случае, когда 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... в DriverManager разрешена трассировка. Последующая строчка кода разрешает трассировку и направляет ее в стандартный вывод:

java.sql.DriverManager.setLogStream (java.lang.System.out);


^ Общие замечания.


Мост рассчитан на нереентерабельные драйверы ODBC. Это 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... значит, что мост синхронизирует доступ к этим драйверам. В итоге мост предоставляет ограниченную конкурентность юзеров. Это и является главным ограничением моста. В отличие от него, многие драйверы JDBC типа 4 (Pure Java) предоставляют 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... требуемый уровень конкурентности.


Контрольные вопросы:


1. Что такое JDBC? Какие способности он предоставляет?

2. Охарактеризуйте двухзвенную модель JDBC.

3. Перечислите способы, относящиеся к классу DriverManager.

4. Как осуществляется загрузка JDBC - драйвера?

5. Какие функции реализуют способы prepareStatement 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... и executeUpdate?

6. Таблица ABC содержит последующие строчки:


ID

NAME

1

Apple

2

Macintosh

3

Microsoft

4

Javasoft


Что выводится на консоль в этом куске кода:

Connection con = DriverManager.getConnection (...);

Statement stmt = con.createStatement ();

ResultSet rs = stmt.executeQuery («select count (*) from ABC where NAME 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... like '%soft»);

For (int n = 0; n<2; n + + )

{

try

{

System.out.print (String.valueOf (rs.getInt (n)));

}

catch (Exception ex)

{

System.out.print («Ошибка»);

}

}


Рекомендуемая литература:


1. Ноутон П. Шилд Г. Java 2: Пер. с англ. - СПб.: «bhv - Петербург 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения...», 2001. – 1072 с.


2. Bruce Eckel Thinking in Java, Prentice Hall, 1998.


3. G. Hamilton, R. Cattell, M. Fisher: JDBC Database Access with Java: A Tutorial and Annotation Reference, Addison Wesley, 1997.

Лекция 6 (4 часа).

Архитектура 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... Каркасов (Framework).


План:


  1. Введение в Архитектуру Каркасов. Обзор системы Swing.

  2. Класс JApplet.

  3. Значки и метки.

  4. Текстовые поля.

  5. Кнопки.

  6. Поля со перечнем.

  7. Панели с вкладками.

  8. Панели прокрутки.

  9. Деревья.

  10. Таблицы.

  11. Другие способности и будущее 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... Swing - технологии.




  1. Введение в Архитектуру Каркасов. Обзор системы Swing.


Каркасы – составляющие программного обеспечения, разработанные для повторного использования.


Они:


Каркасы обычно меняют поток управления (принцип Голливуда: «Не звоните нам, мы вызовем Вас»), что делает их тяжелыми для 5. ResultSet (набор данных) - Настоящий учебный курс посвящен рассмотрению основных существующих архитектур построения... осознания.

Достоинства и недочеты.



Примеры внедрение архитектуры каркасов:



5-raschet-fonda-zarabotnoj-plati-rabotnikov-organizaciya-i-planirovanie-ceha-kontrolno-izmeritelnih-priborov.html
5-raschyot-dohodov-call-centra-metodicheskie-rekomendacii-k-vipolneniyu-kursovoj-raboti-sankt-peterburg.html
5-rassmotrenie-zayavok-na-uchastie-v-aukcione-i-procedura-provedeniya-aukciona.html