Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java_sp.doc
Скачиваний:
48
Добавлен:
29.10.2018
Размер:
1 Мб
Скачать

Закрытие объектов Statement

Объекты Statement закрываются автоматически с помощью сборщика мусора виртуальной машины Java. Тем не менее рекомендуется закрывать их явно после того, как в них отпадает необходимость.

11. Jdbc, обработка полученных результатов, интерфейсы ResultSet, ResultSetMetaData.

ResultSet

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

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

a b c

-------- --------- --------

12345 Cupertino CA

83472 Redmond WA

83492 Boston MA

Следующий фрагмент кода демонстрирует выполнение SQL-запроса, который возвращает коллекцию строк, в которой колонка 1 - это int, колонка 2 - String и колонка 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 s = r.getString("b");

float f = r.getFloat("c");

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

}

Строки и курсоры

ResultSet содержит т.н. курсор, который указывает на текущую строку данных. Каждый раз, когда выполняется метод next, курсор перемещается на одну строку вниз. Изначально курсор спозиционирован перед первой строкой, и первый вызов next премещает его на первую строку (она становится текущей). С каждым успешным вызовом next курсор перемещается вниз на одну строку, начиная с самой верхней в ResultSet.

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

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

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

Колонки

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

Для указания колонки можно использовать либо ее имя, либо ее номер. Например, если вторая колонка объекта ResultSet rs называется "title" и хранит строковое значение, то извлечь его можно одним из двух способов:

String s = rs.getString("title");

String s = rs.getString(2);

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

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

Если известно имя колонки, но не ее индекс, то для поиска номера колонки можно использовать метод findColumn.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]