Post on 11-Feb-2017
Курс по Java, 2016
Базы данныхRDBMS, JDBC
Курс по Java, 2016
Реляционные базы данных
https://plumbr.eu/blog/io/most-popular-relational-databases
Курс по 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
Курс по Java, 2016
CRUD● Create — INSERT● Read — SELECT● Update — UPDATE● Delete — DELETE
Курс по Java, 2016
CRUDtest=# INSERT INTO items (name) VALUES ('First Item'); INSERT 0 1
test=# SELECT * FROM items; id | name ----+------------ 1 | First Item(1 row)
Курс по 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)
Курс по Java, 2016
CRUDtest=# DELETE FROM items WHERE id = 1;DELETE 1
test=# SELECT * FROM items; id | name ----+------(0 rows)
Курс по Java, 2016
JDBCJava 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("%s\t%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
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);}
Курс по Java, 2016
PostgreSQL в Tomcatcp 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
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); }}
Курс по Java, 2016
DataSourcetry (Connection connection = dataSource.getConnection()) { // do something with Connection
} catch (SQLException e) { throw new ServletException(e);}
Курс по Java, 2016
Домашнее заданиеПоиграть с JDBC
Сделать веб приложение со вставкой в БД и чтением из БД. Берем две таблицы: Автор (ФИО) и книга (название, автор, год издания)
Пример: https://github.com/gelin/jdbc-sample