Курс java-2016. Занятие 12. dbms, jdbc

25
Курс по Java, 2016 Базы данных RDBMS, JDBC

Upload: 7bits

Post on 11-Feb-2017

183 views

Category:

Education


0 download

TRANSCRIPT

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

Курс по Java, 2016

Базы данныхRDBMS, JDBC

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

Курс по Java, 2016

Реляционные базы данных

https://plumbr.eu/blog/io/most-popular-relational-databases

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

Курс по Java, 2016

PostgreSQL % psql -h localhost -U postgrespostgres=# CREATE DATABASE test;CREATE DATABASE

% psql -h localhost -U postgres testtest=# CREATE TABLE items ( id serial PRIMARY KEY, name varchar); CREATE TABLE

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

Курс по Java, 2016

CRUD● Create — INSERT● Read — SELECT● Update — UPDATE● Delete — DELETE

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

Курс по Java, 2016

CRUDtest=# INSERT INTO items (name) VALUES ('First Item'); INSERT 0 1

test=# SELECT * FROM items; id | name ----+------------ 1 | First Item(1 row)

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

Курс по Java, 2016

CRUDtest=# UPDATE items SET name = 'First Item Updated' WHERE id = 1;UPDATE 1

test=# SELECT * FROM items; id | name ----+-------------------- 1 | First Item Updated(1 row)

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

Курс по Java, 2016

CRUDtest=# DELETE FROM items WHERE id = 1;DELETE 1

test=# SELECT * FROM items; id | name ----+------(0 rows)

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

Курс по Java, 2016

JDBCJava DataBase Connectivity

java.sql.*

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

Курс по Java, 2016

PostgreSQL Driver<dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4.1208</version> </dependency></dependencies>

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

Курс по Java, 2016

Загрузить драйверClass.forName("org.postgresql.Driver");

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

Курс по 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();

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

Курс по Java, 2016

ВыборкаStatement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery("SELECT * FROM items");while (resultSet.next()){ System.out.println( String.format("%s\t%s", resultSet.getInt(1), resultSet.getString(2)));}resultSet.close();statement.close();

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

Курс по 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();

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

Курс по 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();

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

Курс по Java, 2016

УдалениеPreparedStatement statement = connection.prepareStatement( "DELETE FROM items WHERE id = ?");statement.setInt(1, 42);statement.execute();statement.close();

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

Курс по Java, 2016

SQL инъекцияStatement statement = connection.createStatement();String value = "New Item";statement.execute( "INSERT INTO items (name) VALUES ('" + value + "')");statement.close();

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

Курс по Java, 2016

SQL инъекцияStatement statement = connection.createStatement();String value = "'); DROP TABLE items; SELECT ('1";statement.execute( "INSERT INTO items (name) VALUES ('" + value + "')");statement.close();

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

Курс по Java, 2016

PreparedStatement

PreparedStatement statement = connection.prepareStatement( "INSERT INTO items (name) VALUES (?)");

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

Курс по Java, 2016

AutoClosabletry (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) { throw new ServletException(e);}

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

Курс по Java, 2016

PostgreSQL в Tomcatcp postgresql.jar $CATALINA_HOME/lib

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

Курс по 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>

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

Курс по 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>

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

Курс по Java, 2016

JNDIContext 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); }}

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

Курс по Java, 2016

DataSourcetry (Connection connection = dataSource.getConnection()) { // do something with Connection

} catch (SQLException e) { throw new ServletException(e);}

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

Курс по Java, 2016

Домашнее заданиеПоиграть с JDBC

Сделать веб приложение со вставкой в БД и чтением из БД. Берем две таблицы: Автор (ФИО) и книга (название, автор, год издания)

Пример: https://github.com/gelin/jdbc-sample