Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java / лекции / лекция 17.ppt
Скачиваний:
106
Добавлен:
17.04.2018
Размер:
152.06 Кб
Скачать

Категоризация исключений

SQLException имеет ряд дочерних классов:

SQLNonTransientException — повторная попытка выполнить операцию вызовет такую же ошибку

SQLTransientException — повторная попытка может закончится успешно

SQLRecoverableException — приложению необходимо выполнить действия по восстановлению соединению и попробовать повторить операцию

ResultSet

Типы ResultSet:

TYPE_FORWARD_ONLY

TYPE_SCROLL_INSENSITIVE

TYPE_SCROLL_SENSITIV

Уровень доступа к данным (concurrency level):

CONCUR_READ_ONLY

CONCUR_UPDATABLE

Получение значений из ResultSet

ResultSet имеет методы:

getInt, getLong, getFloat, getDouble, getBoolean, getString и т.д.

Методы могут возвращать значение поля как по номеру (нумерация от единицы) столбца, так и по его названию:

String firstName = rs.getString(1); double salary = rs.getDouble('salary');

Авто-коммит

По умолчанию, каждая операция вызывает изменение данных в БД.

conn.setAutoCommit(false) — отключает это.

conn.commit() - «применяет» ранее вызванные операции над БД.

Пакетные (batch) операции

Пакетные операции ускоряют работу с БД.

conn.setAutoCommit(false); stmt.addBatch(«insert into employees »+

«(first_name, last_name_salary) »+ «values ('Вася', 'Пупкин', 30000)»); stmt.addBatch(«insert into employees »+ «(first_name, last_name_salary) »+

«values ('Петя', 'Сидоров', 20000)»); int[] updateCounts = stmt.executeBatch(); conn.commit();

Подготовленные выражения

PreparedStatement — подготовленное выражение, позволяет выполнять один и тот же запрос с разными параметрами.

PreparedStatement pstmt = conn.prepareStatement(«insert into employees »+

«(first_name, last_name, salary) »+ «values (?,?,?)»);

for (Employee e : employees) { pstmt.setString(1, e.getFirstName()); pstmt.setString(2, e.getLastName()); pstmt.setDouble(3, e.getSalary()); pstmt.executeUpdate();

}

Пакетные поготовленные выражения

conn.setAutoCommit(false);

PreparedStatement pstmt = conn.prepareStatement(«insert into employees »+

«(first_name, last_name, salary) »+

«values (?,?,?)»);

for (Employee e : employees) { pstmt.setString(1, e.getFirstName();

pstmt.setString(2, e.getLastName());

pstmt.setDouble(3, e.getSalary());

pstmt.addBatch();

}

int[] updateCounts = pstmt.executeBatch();

conn.commit();

Statement и PreparedStatement

Преимущества PreparedStatement

Компилируются на стороне СУБД

Быстрее выполняются

Пригодно для многократного использования с разными подставляемыми значениями в параметры

Транзакции

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

Необходимо запретить авто-коммит: conn.setAutoCommit(false); Применение тразнакции: conn.commit();

Откат транзакции: conn.rollback();

Точки сохранения (Savepoint)

Точка сохранения — это какой либо шаг в транзакции.

Точки сохранения позволяет откатить выражения в транзакции.

conn.setAutoCommit(false); stmt.executeUpdate(...)

Savepoint save1 = con.setSavepoint(); ResultSet rs = stmt.executeQuery(...); If (!rs.next())

conn.rollback(save1);

conn.commit();

Соседние файлы в папке лекции