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

Работа с базами данных JDBC

JDBC

Java приложение

Клиентское приложение

JDBC драйвер

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

Сервер СУБД

СУБД

Цель JDBC — унифицировать работу с СУБД для Java приложений

Типы драйверов JDBC

Тип 1. Реализация доступа к другому какому либо DB API (например, ODBC). Драйвер как правило реализован в виде «нативного» кода. Например: JDBC- ODBC bridge.

Тип 2. Драйвер реализован частично на Java. Пример: Oracle OCI драйвер

Тип 3. Драйвер на «чистой» («pure») Java, реализующий интерфейс к промежуточному серверу по общему протоколу.

Тип 4. Драйвер на «чистой» Java, реализующий конкретный протокол СУБД.

Соединение с БД

До JDBC 4.0 (JDK 6) необходимо регистрировать драйверы:

Два способа: ConnectionManager.registerDriver( new com.mysql.jdbc.Driver())

Класс DriverManager

Класс Datasource

Properties props = new Properties();

props.setProperty(«user», «vasya»);

props.setProperty(«password», «123»);

Connection conn =

DriverManager.getConnection(«jdbc:mysql://localhost:3 306/mydb», props);

Connection conn =

DriverManager.getConnection(«jdbc:derby:db/mydb;creat e=true», props);

URL соединения

URL соединения указывает драйверу куда и как подключаться.

Синтаксис зависит от драйвера.

Java DB (Derby):

dbc:derby:[subsubprotocol:][databaseName]

[;attribute=value]*

Mysql:

jdbc:mysql://[host][,failoverhost...][:port]/ [database][?propertyName1][=propertyValue1] [&propertyName2][=propertyValue2]...

Выполнение выражений

Для выполнения выражений используется интерфейс Statement.

Statement stmt = conn.createStatement(); try {

stmt.executeUpdate(«create table employees »+

«(id integer NOT NULL generated always as identity, »+ «first_name varchar(64) NOT NULL, » +

«last_name varchar(64) NOT NULL, » + «salary float NOT NULL, »+

«PRIMARY KEY (id))»; } finally {

stmt.close();

}

Выполнение запросов

ResultSet — интерфейс для объектов с результатами запроса.

ResultSet rs = stmt.executeQuery(«select * from employees»);

try {

while (rs.next()) { System.out.printf(«%s | %s | %

rs.getString(1), rs.getString(2),

}

} finally { rs.close();

}

Никогда так не делайте! Необходимо указывать список столбцов!

Добавление данных в таблицу

...

stmt.execute(«insert into employees»+

«(first_name, last_name, salary) » +

«values ('Вася', 'Пупкин', 30000)»,

Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys();

rs.next();

System.out.println(«Добавлена запись с ID: » + rs.getInt(1));

...

Обработка ошибок (SQLException)

SQLState: 42Y55

Error Code: 30000

Исключение Message: 'DROP TABLE' cannot be performed on 'MYDB.EMPLOYEES' because it does not exist.

getMessage()

ошибке

getSQLState()

обозначение ошибки по ISO/ANSI

getErrorCode() - возвращает код ошибки

getNextException() - возвращает следующее исключение в цепочке исключений

Предупреждения (SQLWarning)

SQLWarning — наследник SQLException.SQLWarning stmt.getWarnings()

Предупреждения очищаются перед каждым новым вызовом выражения.

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