JDBC e Hibernate Bancos de dados e mapeamento objeto relacional em Java
Acessar bancos de dados em Java é fácil! Coméquié?
O que? Não acredita? Você só tem que conhecer três interfaces: java.sql.Connection java.sql.Statement java.sql.ResultSet
Código de acesso ao banco Class. forName (&quot;org.h2.Driver&quot;); Connection connection = DriverManager. getConnection (&quot;jdbc:h2:file:database/erp&quot;); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery( &quot;select * from Autor&quot; ); while  ( resultSet.next() ) { System. out .printf(&quot;Linha %s%n&quot;, resultSet.getRow()); for  (  int  x = 1; x <= resultSet.getMetaData().getColumnCount(); x++ ) { System. out .printf(&quot;\tColumn: %s Value %s%n&quot;,  resultSet.getMetaData().getColumnName(x), resultSet.getString( x )); } } connection.close();
E quem é DriverManager?
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;
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”;
PreparedStatements Class. forName ( &quot;org.h2.Driver&quot; ); Connection  connection  = DriverManager. getConnection ( &quot;jdbc:h2:file:database/erp&quot; ); PreparedStatement  statement  = connection .prepareStatement(  &quot;select * from Autor a where a.id = ?&quot;  ); statement .setLong(1, 1); ResultSet  resultSet  =  statement .executeQuery(); while  (  resultSet .next() ) { System. out .printf( &quot;Linha %s%n&quot; ,  resultSet .getRow()); for  (  int   x  = 1;  x  <=  resultSet .getMetaData().getColumnCount();  x ++ ) { System. out .printf( &quot;\tColumn: %s Value %s%n&quot; ,  resultSet .getMetaData().getColumnName( x ), resultSet .getString(  x  )); } } connection .close();
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>]}
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;
Transações em JDBC connection .setAutoCommit( false ); connection .setTransactionIsolation(Connection. TRANSACTION_SERIALIZABLE ); PreparedStatement  statement  =  connection .prepareStatement( &quot;select * from Autor&quot; , ResultSet. TYPE_SCROLL_SENSITIVE , ResultSet. CONCUR_UPDATABLE ); ResultSet  resultSet  =  statement .executeQuery(); while  ( resultSet .next()) { resultSet .updateString(4,  &quot;http://maujr.org/&quot; ); resultSet .updateRow(); } try  { connection .commit(); }  catch  (SQLException  e ) { connection .rollback(); }  finally  { connection .close(); }
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;
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;
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;
Tipos de ResultSet - Atualização CONCUR_READ_ONLY – ResultSet de apenas leitura; CONCUR_UPDATABLE – ResultSet atualizável;
THE END E VOCÊ NÃO VIU NADA SER  CLICADO E ARRASTADO...

Jdbc e hibernate

  • 1.
    JDBC e HibernateBancos de dados e mapeamento objeto relacional em Java
  • 2.
    Acessar bancos dedados em Java é fácil! Coméquié?
  • 3.
    O que? Nãoacredita? Você só tem que conhecer três interfaces: java.sql.Connection java.sql.Statement java.sql.ResultSet
  • 4.
    Código de acessoao banco Class. forName (&quot;org.h2.Driver&quot;); Connection connection = DriverManager. getConnection (&quot;jdbc:h2:file:database/erp&quot;); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery( &quot;select * from Autor&quot; ); while ( resultSet.next() ) { System. out .printf(&quot;Linha %s%n&quot;, resultSet.getRow()); for ( int x = 1; x <= resultSet.getMetaData().getColumnCount(); x++ ) { System. out .printf(&quot;\tColumn: %s Value %s%n&quot;, resultSet.getMetaData().getColumnName(x), resultSet.getString( x )); } } connection.close();
  • 5.
    E quem éDriverManager?
  • 6.
    Statements Executam comandosSQL no banco de dados; Podem executar qualquer tipo de comando, específico ou não, do banco; Precisam de uma conexão aberta;
  • 7.
    PreparedStatements Executa comandosDML de forma parametrizada; É mais rápido e mais seguro do que fazer concatenação de Strings; Previne ataques de “SQL Injection”;
  • 8.
    PreparedStatements Class. forName( &quot;org.h2.Driver&quot; ); Connection connection = DriverManager. getConnection ( &quot;jdbc:h2:file:database/erp&quot; ); PreparedStatement statement = connection .prepareStatement( &quot;select * from Autor a where a.id = ?&quot; ); statement .setLong(1, 1); ResultSet resultSet = statement .executeQuery(); while ( resultSet .next() ) { System. out .printf( &quot;Linha %s%n&quot; , resultSet .getRow()); for ( int x = 1; x <= resultSet .getMetaData().getColumnCount(); x ++ ) { System. out .printf( &quot;\tColumn: %s Value %s%n&quot; , resultSet .getMetaData().getColumnName( x ), resultSet .getString( x )); } } connection .close();
  • 9.
    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>]}
  • 10.
    Transações em JDBCAs 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;
  • 11.
    Transações em JDBCconnection .setAutoCommit( false ); connection .setTransactionIsolation(Connection. TRANSACTION_SERIALIZABLE ); PreparedStatement statement = connection .prepareStatement( &quot;select * from Autor&quot; , ResultSet. TYPE_SCROLL_SENSITIVE , ResultSet. CONCUR_UPDATABLE ); ResultSet resultSet = statement .executeQuery(); while ( resultSet .next()) { resultSet .updateString(4, &quot;http://maujr.org/&quot; ); resultSet .updateRow(); } try { connection .commit(); } catch (SQLException e ) { connection .rollback(); } finally { connection .close(); }
  • 12.
    Tipos de transaçãoTRANSACTION_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;
  • 13.
    Tipos de transaçãoTRANSACTION_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;
  • 14.
    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;
  • 15.
    Tipos de ResultSet- Atualização CONCUR_READ_ONLY – ResultSet de apenas leitura; CONCUR_UPDATABLE – ResultSet atualizável;
  • 16.
    THE END EVOCÊ NÃO VIU NADA SER CLICADO E ARRASTADO...