SlideShare a Scribd company logo
Курс по Java, 2016
Базы данных
RDBMS, JDBC
Курс по Java, 2016
Реляционные базы данных
https://plumbr.eu/blog/io/most-popular-relational-databases
Курс по Java, 2016
PostgreSQL
% psql -h localhost -U postgres
postgres=# CREATE DATABASE test;
CREATE DATABASE
% psql -h localhost -U postgres test
test=# CREATE TABLE items (
id serial PRIMARY KEY,
name varchar);
CREATE TABLE
Курс по Java, 2016
CRUD
● Create — INSERT
● Read — SELECT
● Update — UPDATE
● Delete — DELETE
Курс по Java, 2016
CRUD
test=# INSERT INTO items (name) VALUES ('First Item');
INSERT 0 1
test=# SELECT * FROM items;
id | name
----+------------
1 | First Item
(1 row)
Курс по Java, 2016
CRUD
test=# UPDATE items
SET name = 'First Item Updated'
WHERE id = 1;
UPDATE 1
test=# SELECT * FROM items;
id | name
----+--------------------
1 | First Item Updated
(1 row)
Курс по Java, 2016
CRUD
test=# DELETE FROM items WHERE id = 1;
DELETE 1
test=# SELECT * FROM items;
id | name
----+------
(0 rows)
Курс по Java, 2016
JDBC
Java DataBase Connectivity
java.sql.*
Курс по Java, 2016
PostgreSQL Driver
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1208</version>
</dependency>
</dependencies>
Курс по Java, 2016
Загрузить драйвер
Class.forName("org.postgresql.Driver");
Курс по Java, 2016
Подключиться к БД
String url = "jdbc:postgresql://localhost/test";
String username = "postgres";
String password = "postgres";
Connection connection =
DriverManager.getConnection(url, username, password);
// do something
connection.close();
Курс по Java, 2016
Выборка
Statement statement = connection.createStatement();
ResultSet resultSet =
statement.executeQuery("SELECT * FROM items");
while (resultSet.next())
{
System.out.println(
String.format("%st%s",
resultSet.getInt(1),
resultSet.getString(2)));
}
resultSet.close();
statement.close();
Курс по Java, 2016
Вставка
PreparedStatement statement =
connection.prepareStatement(
"INSERT INTO items (name) VALUES (?)");
statement.setString(1,
String.format("New Item at %s", new java.util.Date()));
statement.execute();
statement.close();
Курс по Java, 2016
Обновление
PreparedStatement statement = connection.prepareStatement(
"UPDATE items SET name = ? WHERE id = ?");
statement.setString(1, "Item Name");
statement.setInt(2, 42);
statement.execute();
statement.close();
Курс по Java, 2016
Удаление
PreparedStatement statement = connection.prepareStatement(
"DELETE FROM items WHERE id = ?");
statement.setInt(1, 42);
statement.execute();
statement.close();
Курс по Java, 2016
SQL инъекция
Statement statement = connection.createStatement();
String value = "New Item";
statement.execute(
"INSERT INTO items (name) VALUES ('" + value + "')");
statement.close();
Курс по Java, 2016
SQL инъекция
Statement statement = connection.createStatement();
String value = "'); DROP TABLE items; SELECT ('1";
statement.execute(
"INSERT INTO items (name) VALUES ('" + value + "')");
statement.close();
Курс по Java, 2016
PreparedStatement
PreparedStatement statement =
connection.prepareStatement(
"INSERT INTO items (name) VALUES (?)");
Курс по Java, 2016
AutoClosable
try (Connection connection =
dataSource.getConnection()) {
try (PreparedStatement statement =
connection.prepareStatement(
"SELECT id, name FROM items")) {
try (ResultSet resultSet =
statement.executeQuery()) {
while (resultSet.next()) {
...
}
}
}
} catch (SQLException e) {
Курс по Java, 2016
PostgreSQL в Tomcat
cp postgresql.jar $CATALINA_HOME/lib
Курс по Java, 2016
context.xml
<Context>
<Resource name="jdbc/db" auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost/test"
username="postgres" password="postgres"
maxTotal="20" maxIdle="10"
maxWaitMillis="-1"/>
</Context>
Курс по Java, 2016
web.xml
<resource-ref>
<description>Main DataSource</description>
<res-ref-name>jdbc/db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Курс по Java, 2016
JNDI
Context context = null;
DataSource dataSource;
try {
context = new InitialContext();
dataSource = (DataSource) context.lookup(
"java:/comp/env/jdbc/db");
} catch (NamingException e) {
throw new ServletException(e);
} finally {
try {
context.close();
} catch (NamingException e) {
throw new ServletException(e);
Курс по Java, 2016
DataSource
try (Connection connection = dataSource.getConnection()) {
// do something with Connection
} catch (SQLException e) {
throw new ServletException(e);
}
Курс по Java, 2016
Домашнее задание
Поиграть с JDBC
Сделать веб приложение со вставкой в БД и чтением из БД. Берем две
таблицы: Автор (ФИО) и книга (название, автор, год издания)
Пример: https://github.com/gelin/jdbc-sample

More Related Content

What's hot

8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
MERA_school
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
MERA_school
 
Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключений
itclub_kz
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classes
MERA_school
 

What's hot (19)

JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
Скриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОСкриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПО
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметки
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
Scala On Rest
Scala On RestScala On Rest
Scala On Rest
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
Spring data jee conf
Spring data jee confSpring data jee conf
Spring data jee conf
 
Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключений
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classes
 
C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.C++ STL & Qt. Занятие 01.
C++ STL & Qt. Занятие 01.
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 

Viewers also liked

Viewers also liked (9)

Курс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSPКурс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSP
 
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
Спецкурс-2015. Занятие 04 (часть 1). Конфигурации, сборка проекта, автоматизи...
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтендаСтажировка-2015. Разработка. Занятие 13. Сборка фронтенда
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
 
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
Стажировка-2015. Разработка. Занятие 14. Twitter FlightСтажировка-2015. Разработка. Занятие 14. Twitter Flight
Стажировка-2015. Разработка. Занятие 14. Twitter Flight
 
Курс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. SpringКурс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. Spring
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
 

Similar to Курс Java-2016. Занятие 12. DBMS, JDBC

Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.
MageCloud
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Глеб Тарасов
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
Andrey Rebrov
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
Andrey Gershun
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Ilya Shalyapin
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
AndreyGeonya
 

Similar to Курс Java-2016. Занятие 12. DBMS, JDBC (20)

Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Alasql.js - SQL сервер на JavaScript
Alasql.js - SQL сервер на JavaScriptAlasql.js - SQL сервер на JavaScript
Alasql.js - SQL сервер на JavaScript
 
Scala for android
Scala for androidScala for android
Scala for android
 
Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.Модульное тестирование iOS-приложений.
Модульное тестирование iOS-приложений.
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNGвебинар - функциональное тестирование с использованием Selenium 2 и TestNG
вебинар - функциональное тестирование с использованием Selenium 2 и TestNG
 
Jdbc in java
Jdbc in javaJdbc in java
Jdbc in java
 
Unit test быстрый старт
Unit test быстрый стартUnit test быстрый старт
Unit test быстрый старт
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
 
Dependency injection, phemto
Dependency injection, phemtoDependency injection, phemto
Dependency injection, phemto
 
Pycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и DjangoPycon Russia 2013 - Разработка через тестирование в Python и Django
Pycon Russia 2013 - Разработка через тестирование в Python и Django
 
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...
 
Разработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconruРазработка через тестирование в Python и Django #pyconru
Разработка через тестирование в Python и Django #pyconru
 
Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
 
Как программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногуКак программировать на JavaScript и не выстрелить себе в ногу
Как программировать на JavaScript и не выстрелить себе в ногу
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorProgramming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
 

More from 7bits

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
7bits
 

More from 7bits (16)

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофтаГудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакатьГудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в ITGoodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
Курс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и JavaКурс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и Java
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHubКурс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологиюКурс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологию
 
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
Стажировка-2015. Разработка. Занятие 12. Транзакции в БД, работа с БД из прил...
 
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложенийСтажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
Стажировка-2015. Разработка. Занятие 11. Безопасность web-приложений
 
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
Стажировка-2015. Разработка. Занятие 10 (часть 2). Исключения и логи.
 
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотестыСтажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
Стажировка-2015. Разработка. Занятие 10 (часть 1). Конфиги, сборка, автотесты
 
Стажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEMСтажировка 2015. Разработка. Занятие 9. BEM
Стажировка 2015. Разработка. Занятие 9. BEM
 

Курс Java-2016. Занятие 12. DBMS, JDBC

  • 1. Курс по Java, 2016 Базы данных RDBMS, JDBC
  • 2. Курс по Java, 2016 Реляционные базы данных https://plumbr.eu/blog/io/most-popular-relational-databases
  • 3. Курс по Java, 2016 PostgreSQL % psql -h localhost -U postgres postgres=# CREATE DATABASE test; CREATE DATABASE % psql -h localhost -U postgres test test=# CREATE TABLE items ( id serial PRIMARY KEY, name varchar); CREATE TABLE
  • 4. Курс по Java, 2016 CRUD ● Create — INSERT ● Read — SELECT ● Update — UPDATE ● Delete — DELETE
  • 5. Курс по Java, 2016 CRUD test=# INSERT INTO items (name) VALUES ('First Item'); INSERT 0 1 test=# SELECT * FROM items; id | name ----+------------ 1 | First Item (1 row)
  • 6. Курс по Java, 2016 CRUD test=# UPDATE items SET name = 'First Item Updated' WHERE id = 1; UPDATE 1 test=# SELECT * FROM items; id | name ----+-------------------- 1 | First Item Updated (1 row)
  • 7. Курс по Java, 2016 CRUD test=# DELETE FROM items WHERE id = 1; DELETE 1 test=# SELECT * FROM items; id | name ----+------ (0 rows)
  • 8. Курс по Java, 2016 JDBC Java DataBase Connectivity java.sql.*
  • 9. Курс по Java, 2016 PostgreSQL Driver <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4.1208</version> </dependency> </dependencies>
  • 10. Курс по Java, 2016 Загрузить драйвер Class.forName("org.postgresql.Driver");
  • 11. Курс по Java, 2016 Подключиться к БД String url = "jdbc:postgresql://localhost/test"; String username = "postgres"; String password = "postgres"; Connection connection = DriverManager.getConnection(url, username, password); // do something connection.close();
  • 12. Курс по Java, 2016 Выборка Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM items"); while (resultSet.next()) { System.out.println( String.format("%st%s", resultSet.getInt(1), resultSet.getString(2))); } resultSet.close(); statement.close();
  • 13. Курс по Java, 2016 Вставка PreparedStatement statement = connection.prepareStatement( "INSERT INTO items (name) VALUES (?)"); statement.setString(1, String.format("New Item at %s", new java.util.Date())); statement.execute(); statement.close();
  • 14. Курс по Java, 2016 Обновление PreparedStatement statement = connection.prepareStatement( "UPDATE items SET name = ? WHERE id = ?"); statement.setString(1, "Item Name"); statement.setInt(2, 42); statement.execute(); statement.close();
  • 15. Курс по Java, 2016 Удаление PreparedStatement statement = connection.prepareStatement( "DELETE FROM items WHERE id = ?"); statement.setInt(1, 42); statement.execute(); statement.close();
  • 16. Курс по Java, 2016 SQL инъекция Statement statement = connection.createStatement(); String value = "New Item"; statement.execute( "INSERT INTO items (name) VALUES ('" + value + "')"); statement.close();
  • 17. Курс по Java, 2016 SQL инъекция Statement statement = connection.createStatement(); String value = "'); DROP TABLE items; SELECT ('1"; statement.execute( "INSERT INTO items (name) VALUES ('" + value + "')"); statement.close();
  • 18. Курс по Java, 2016 PreparedStatement PreparedStatement statement = connection.prepareStatement( "INSERT INTO items (name) VALUES (?)");
  • 19. Курс по Java, 2016 AutoClosable try (Connection connection = dataSource.getConnection()) { try (PreparedStatement statement = connection.prepareStatement( "SELECT id, name FROM items")) { try (ResultSet resultSet = statement.executeQuery()) { while (resultSet.next()) { ... } } } } catch (SQLException e) {
  • 20. Курс по Java, 2016 PostgreSQL в Tomcat cp postgresql.jar $CATALINA_HOME/lib
  • 21. Курс по Java, 2016 context.xml <Context> <Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost/test" username="postgres" password="postgres" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/> </Context>
  • 22. Курс по Java, 2016 web.xml <resource-ref> <description>Main DataSource</description> <res-ref-name>jdbc/db</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
  • 23. Курс по Java, 2016 JNDI Context context = null; DataSource dataSource; try { context = new InitialContext(); dataSource = (DataSource) context.lookup( "java:/comp/env/jdbc/db"); } catch (NamingException e) { throw new ServletException(e); } finally { try { context.close(); } catch (NamingException e) { throw new ServletException(e);
  • 24. Курс по Java, 2016 DataSource try (Connection connection = dataSource.getConnection()) { // do something with Connection } catch (SQLException e) { throw new ServletException(e); }
  • 25. Курс по Java, 2016 Домашнее задание Поиграть с JDBC Сделать веб приложение со вставкой в БД и чтением из БД. Берем две таблицы: Автор (ФИО) и книга (название, автор, год издания) Пример: https://github.com/gelin/jdbc-sample