Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

joined_document

.pdf
Скачиваний:
4
Добавлен:
20.03.2016
Размер:
1.84 Mб
Скачать

Освобождение ресурсов

resultSet.close();

statement.close();

connection.close();

Транзакции

Атомарность

Согласованность

Изолированность

Долговечность

10

Транзакции

connection.setAutoCommit(false);

connection.commit();

connection.rollback();

Транзакции

Lost update

двойное обновление в параллельных транзакциях

Dirty reads

чтение уже измененных данных

Nonrepeatable reads

при повторном чтении строки изменяются или удаляются

Phantom reads

при повторном чтении строки добавляются

11

Транзакции

connection.

getTransactionIsolation();

connection.

setTransactionIsolation();

Транзакции

TRANSACTION_NONE

TRANSACTION_READ_UNCOMMITED

TRANSACTION_READ_COMMITED

TRANSACTION_REPEATABLE_READ

TRANSACTION_SERIALIZEABLE

12

Транзакции

Уровень

Phantom

Non-

Dirty reads

Lost update

reads

repeatable

 

 

изоляции

 

 

 

reads

 

 

 

 

 

 

SERIALIZEABLE

 

 

 

 

 

 

 

 

 

REPEATABLE

 

 

 

 

READ

 

 

 

 

 

 

 

 

 

READ

 

 

 

 

COMMITED

 

 

 

 

 

 

 

 

 

READ

 

 

 

 

UNCOMMITED

 

 

 

 

 

 

 

 

 

13

Пул соединений

Особенности выполнения подключения к СУБД

Open

Transaction

Close

Connection

 

Connection

1

Особенности Connection Pool-а

Connection connection =

DriverManager.getConnection(

"jdbc:mysql://localhost/library",

"root",

"root"

);

Особенности Connection Pool-а

Работа с СУБД от имени одного пользователя

Работа только с одной СУБД и одной БД в ней

2

Плюсы Connection Pool-а

Сокращение времени получения экземпляра класса Connection

Возможность централизованно управлять всеми соединениями

Упрощение рутинных операций с соединениями (например, закрытие

STATEMENT-ов и RESULTSET-ов)

Минусы Connection Pool-а

Хранение непригодных (закрытых) соединение или дополнительная

нагрузка по контролю пригодности соединений

Проблемы с безопасностью

Трудности в реализации асинхронной работы с СУБД

3

Пример реализации

final public class ConnectionPool { private static ConnectionPool instance =

new ConnectionPool();

private ConnectionPool() {}

public static ConnectionPool getInstance() { return instance;

}

/* ... */

}

Пример реализации

final public class ConnectionPool {

/* ... */

private BlockingQueue<Connection> connections = new LinkedBlockingQueue<Connection>();

public Connection getConnection()

throws DataException {

}

public void freeConnection(Connection c) {

}

}

4

Альтернатива реализации

final public class ConnectionPool { private static BlockingQueue<Connection>

connections = new LinkedBlockingQueue<Connection>();

private ConnectionPool() {}

public static Connection getConnection()

throws DataException {

}

public static void freeConnection(Connection c) {

}

}

Пример реализации

public Connection getConnection() throws DataException { Connection c = null;

while(c == null) { try {

/* ... */

} catch(SQLExcepton e) {

throw new DataException(e); } catch(InterruptedException e) { throw new DataException(e);

}

}

}

5

Пример реализации

if(!connections.isEmpty()) {

c= connections.take(); if(!c.isValid(0)) {

c = null;

}

}else {

c= DriverManager.getConnection(

"jdbc:mysql://localhost/library", "root", "root"

);

}

Пример реализации

if(!connections.isEmpty()) { c = connections.take(); if(!c.isValid(0)) {

c = null;

}

} else {

/* Class.forName("com.mysql.jdbc.Driver"); */ c = DriverManager.getConnection(

"jdbc:mysql://localhost/library", "root", "root"

);

}

6

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