Jdbc e hibernate

1,370 views
1,261 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,370
On SlideShare
0
From Embeds
0
Number of Embeds
74
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Jdbc e hibernate

  1. 1. JDBC e Hibernate Bancos de dados e mapeamento objeto relacional em Java
  2. 2. Acessar bancos de dados em Java é fácil! Coméquié?
  3. 3. O que? Não acredita? <ul><li>Você só tem que conhecer três interfaces: </li></ul><ul><li>java.sql.Connection </li></ul><ul><li>java.sql.Statement </li></ul><ul><li>java.sql.ResultSet </li></ul>
  4. 4. Código de acesso ao banco <ul><li>Class. forName (&quot;org.h2.Driver&quot;); </li></ul><ul><li>Connection connection = DriverManager. getConnection (&quot;jdbc:h2:file:database/erp&quot;); </li></ul><ul><li>Statement statement = connection.createStatement(); </li></ul><ul><li>ResultSet resultSet = statement.executeQuery( &quot;select * from Autor&quot; ); </li></ul><ul><li>while ( resultSet.next() ) { </li></ul><ul><li>System. out .printf(&quot;Linha %s%n&quot;, resultSet.getRow()); </li></ul><ul><li>for ( int x = 1; x <= resultSet.getMetaData().getColumnCount(); x++ ) { </li></ul><ul><li>System. out .printf(&quot;tColumn: %s Value %s%n&quot;, </li></ul><ul><li>resultSet.getMetaData().getColumnName(x), </li></ul><ul><li>resultSet.getString( x )); </li></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul><ul><li>connection.close(); </li></ul>
  5. 5. E quem é DriverManager?
  6. 6. Statements <ul><li>Executam comandos SQL no banco de dados; </li></ul><ul><li>Podem executar qualquer tipo de comando, específico ou não, do banco; </li></ul><ul><li>Precisam de uma conexão aberta; </li></ul>
  7. 7. PreparedStatements <ul><li>Executa comandos DML de forma parametrizada; </li></ul><ul><li>É mais rápido e mais seguro do que fazer concatenação de Strings; </li></ul><ul><li>Previne ataques de “SQL Injection”; </li></ul>
  8. 8. PreparedStatements <ul><li>Class. forName ( &quot;org.h2.Driver&quot; ); </li></ul><ul><li>Connection connection = DriverManager. getConnection ( &quot;jdbc:h2:file:database/erp&quot; ); </li></ul><ul><li>PreparedStatement statement = </li></ul><ul><li>connection .prepareStatement( &quot;select * from Autor a where a.id = ?&quot; ); </li></ul><ul><li>statement .setLong(1, 1); </li></ul><ul><li>ResultSet resultSet = statement .executeQuery(); </li></ul><ul><li>while ( resultSet .next() ) { </li></ul><ul><li>System. out .printf( &quot;Linha %s%n&quot; , resultSet .getRow()); </li></ul><ul><li>for ( int x = 1; x <= resultSet .getMetaData().getColumnCount(); x ++ ) { </li></ul><ul><li>System. out .printf( &quot;tColumn: %s Value %s%n&quot; , </li></ul><ul><li>resultSet .getMetaData().getColumnName( x ), </li></ul><ul><li>resultSet .getString( x )); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>connection .close(); </li></ul>
  9. 9. CallableStatement <ul><li>Executa uma “stored procedure” no banco de dados; </li></ul><ul><li>Pode gerar ResultSets ou apenas o contador de atualização; </li></ul><ul><li>Sintaxe padronizada para qualquer banco: </li></ul><ul><ul><li>{? = call <procedure>[<arg1>,<arg2>]} </li></ul></ul><ul><ul><li>{call <procedure>[<arg1>,<arg2>]} </li></ul></ul>
  10. 10. Transações em JDBC <ul><li>As transações são definidas no objeto Connection; </li></ul><ul><li>Para iniciar uma, deve chamar o método “setAutoCommit()” com o valor “false”; </li></ul><ul><li>Para terminar uma transação, o método “commit()” deve ser chamado; </li></ul>
  11. 11. Transações em JDBC <ul><li>connection .setAutoCommit( false ); </li></ul><ul><li>connection .setTransactionIsolation(Connection. TRANSACTION_SERIALIZABLE ); </li></ul><ul><li>PreparedStatement statement = connection .prepareStatement( </li></ul><ul><li>&quot;select * from Autor&quot; , </li></ul><ul><li>ResultSet. TYPE_SCROLL_SENSITIVE , </li></ul><ul><li>ResultSet. CONCUR_UPDATABLE ); </li></ul><ul><li>ResultSet resultSet = statement .executeQuery(); </li></ul><ul><li>while ( resultSet .next()) { </li></ul><ul><li>resultSet .updateString(4, &quot;http://maujr.org/&quot; ); </li></ul><ul><li>resultSet .updateRow(); </li></ul><ul><li>} </li></ul><ul><li>try { </li></ul><ul><li>connection .commit(); </li></ul><ul><li>} catch (SQLException e ) { </li></ul><ul><li>connection .rollback(); </li></ul><ul><li>} finally { </li></ul><ul><li>connection .close(); </li></ul><ul><li>} </li></ul>
  12. 12. Tipos de transação <ul><li>TRANSACTION_NONE – Não há transação; </li></ul><ul><li>TRANSACTION_READ_COMMITED – Pode ler dados que foram enviados por outras transações; </li></ul><ul><li>TRANSACTION_READ_UNCOMMITED – Pode ler dados ainda não validados por outra transação; </li></ul>
  13. 13. Tipos de transação <ul><li>TRANSACTION_REPEATABLE_READ – Garante que a mesma query vai retornar os mesmos resultados duas vezes, mas uma “phantom-read” ainda pode acontecer; </li></ul><ul><li>TRANSACTION_SERIALIZABLE – Os comandos são enviados de forma seqüencial e não concorrente, os dados vão ser garantidamente gravados e corretamente; </li></ul>
  14. 14. Tipos de ResultSet - Navegação <ul><li>TYPE_FORWARD_ONLY – Navegação sequencial e não percebe atualizações externas </li></ul><ul><li>TYPE_SCROLL_INSENSITIVE – Navegação total (ida e volta) mas ainda não percebe atualizações externas; </li></ul><ul><li>TYPE_SCROLL_SENSITIVE – Navegação total e ainda percebe atualizações feitas por outros usuários nos dados do banco; </li></ul>
  15. 15. Tipos de ResultSet - Atualização <ul><li>CONCUR_READ_ONLY – ResultSet de apenas leitura; </li></ul><ul><li>CONCUR_UPDATABLE – ResultSet atualizável; </li></ul>
  16. 16. THE END E VOCÊ NÃO VIU NADA SER CLICADO E ARRASTADO...

×