jdbc e hibernate

16

Click here to load reader

Upload: mauricio-linhares

Post on 06-Jun-2015

1.154 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Jdbc e hibernate

JDBC e Hibernate

Bancos de dados e mapeamento objeto relacional em Java

Page 2: Jdbc e hibernate

Acessar bancos de dados em Java é fácil!

Coméquié?

Page 3: Jdbc e hibernate

O que? Não acredita?

Você só tem que conhecer três interfaces:

•java.sql.Connection•java.sql.Statement•java.sql.ResultSet

Page 4: Jdbc e hibernate

Código de acesso ao banco

Class.forName("org.h2.Driver");Connection connection = DriverManager.getConnection("jdbc:h2:file:database/erp");

Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery( "select * from Autor" );

while ( resultSet.next() ) {System.out.printf("Linha %s%n", resultSet.getRow());for ( int x = 1; x <= resultSet.getMetaData().getColumnCount(); x++ ) {

System.out.printf("\tColumn: %s Value %s%n", resultSet.getMetaData().getColumnName(x),resultSet.getString( x ));

}}

connection.close();

Page 5: Jdbc e hibernate

E quem é DriverManager?

Page 6: Jdbc e hibernate

Statements

Executam comandos SQL no banco de dados;

Podem executar qualquer tipo de comando, específico ou não, do banco;

Precisam de uma conexão aberta;

Page 7: Jdbc e hibernate

PreparedStatements

Executa comandos DML de forma parametrizada;

É mais rápido e mais seguro do que fazer concatenação de Strings;

Previne ataques de “SQL Injection”;

Page 8: Jdbc e hibernate

PreparedStatements

Class.forName("org.h2.Driver");Connection connection = DriverManager.getConnection("jdbc:h2:file:database/erp");

PreparedStatement statement =connection.prepareStatement( "select * from Autor a where a.id = ?" );statement.setLong(1, 1);ResultSet resultSet = statement.executeQuery();

while ( resultSet.next() ) {System.out.printf("Linha %s%n", resultSet.getRow());for ( int x = 1; x <= resultSet.getMetaData().getColumnCount(); x++ ) {

System.out.printf("\tColumn: %s Value %s%n", resultSet.getMetaData().getColumnName(x),resultSet.getString( x ));

}}

connection.close();

Page 9: Jdbc e hibernate

CallableStatement

Executa uma “stored procedure” no banco de dados;

Pode gerar ResultSets ou apenas o contador de atualização;

Sintaxe padronizada para qualquer banco:{? = call <procedure>[<arg1>,<arg2>]} {call <procedure>[<arg1>,<arg2>]}

Page 10: Jdbc e hibernate

Transações em JDBC

As transações são definidas no objeto Connection;

Para iniciar uma, deve chamar o método “setAutoCommit()” com o valor “false”;

Para terminar uma transação, o método “commit()” deve ser chamado;

Page 11: Jdbc e hibernate

Transações em JDBC

connection.setAutoCommit(false);connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);

PreparedStatement statement = connection.prepareStatement("select * from Autor",ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet resultSet = statement.executeQuery();

while (resultSet.next()) {resultSet.updateString(4, "http://maujr.org/");resultSet.updateRow();

}try {

connection.commit();} catch (SQLException e) {

connection.rollback();} finally {

connection.close();}

Page 12: Jdbc e hibernate

Tipos de transação

TRANSACTION_NONE – Não há transação;

TRANSACTION_READ_COMMITED – Pode ler dados que foram enviados por outras transações;

TRANSACTION_READ_UNCOMMITED – Pode ler dados ainda não validados por outra transação;

Page 13: Jdbc e hibernate

Tipos de transação

TRANSACTION_REPEATABLE_READ – Garante que a mesma query vai retornar os mesmos resultados duas vezes, mas uma “phantom-read” ainda pode acontecer;

TRANSACTION_SERIALIZABLE – Os comandos são enviados de forma seqüencial e não concorrente, os dados vão ser garantidamente gravados e corretamente;

Page 14: Jdbc e hibernate

Tipos de ResultSet - Navegação TYPE_FORWARD_ONLY – Navegação

sequencial e não percebe atualizações externas

TYPE_SCROLL_INSENSITIVE – Navegação total (ida e volta) mas ainda não percebe atualizações externas;

TYPE_SCROLL_SENSITIVE – Navegação total e ainda percebe atualizações feitas por outros usuários nos dados do banco;

Page 15: Jdbc e hibernate

Tipos de ResultSet - Atualização

CONCUR_READ_ONLY – ResultSet de apenas leitura;

CONCUR_UPDATABLE – ResultSet atualizável;

Page 16: Jdbc e hibernate

THE END

E VOCÊ NÃO VIU NADA SER CLICADO E ARRASTADO...