Slide 1 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 2 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 3 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 4 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 5 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 6 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 7 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 8 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 9 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 10 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Qualquer variável local que for utilizada em uma classe interna anônima deve ser declarada final, caso contrário, ocorre um erro de compilação; A classe TableRowSorter (do pacote javax.swing.table) pode ser usada para classificar linhas em uma JTable; Quando o usuário clicar no título de determinada coluna JTable, o TableRowSorter interage com o TableModel subjacente para reordenar as linhas com base nos dados dessa coluna; O método JTable setRowSorter() especifica o TableRowSorter para JTable. Slide 11 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education JTables podem mostrar agora subconjuntos dos dados do TableModel subjacente. Isso é conhecido como filtragem de dados; O método JTable setRowFilter() especifica um RowFilter (do pacote javax.swing) para um Jtable; O método RowFilter static regexFilter() recebe uma String contendo um padrão de expressão regular como seu argumento e um conjunto opcional de índices que especifica quais colunas filtrar. ◦ Se nenhum índice for especificado, então todas as colunas são pesquisadas. Slide 12 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 13 A interface RowSet fornece vários métodos set que permite especificar as propriedades necessárias para estabelecer uma conexão e criar um Statement; RowSet também fornece vários métodos get que retornam essas propriedades; Tipos de objetos RowSet: conectado e desconectado; ◦ Um objeto RowSet conectado conecta-se ao banco de dados uma vez e permanece conectado enquanto o objeto estiver em uso; ◦ Um objeto RowSet desconectado conecta-se ao banco de dados, executa uma consulta para recuperar os dados do banco de dados e depois fecha a conexão. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 14 Um programa pode alterar os dados em um RowSet desconectado enquanto ele estiver desconectado. ◦ Dados modificados podem ser atualizados no banco de dados depois que um RowSet desconectado restabelecer a conexão com o banco de dados. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education O pacote javax.sql.rowset contém duas subinterfaces de RowSet — JdbcRowSet e CachedRowSet; JdbcRowSet, um RowSet conectado, atua como um empacotador em torno de um objeto ResultSet e permite aos programadores percorrer e atualizar as linhas no ResultSet; Um objeto JdbcRowSet é rolável e atualizável por padrão; Slide 15 CachedRowSet, um RowSet desconectado, armazena os dados em cache de um ResultSet na memória e desconecta-se do banco de dados. Um objeto CachedRowSet é rolável e atualizável por padrão. Também é serializável, então ele pode ser passado entre aplicativos Java por uma rede, como a Internet. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 16 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 17 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 18 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 19 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 20 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education O pacote com.sun.rowset fornece implementações de referência da Sun para as interfaces no pacote javax.sql.rowset; A implementação de referência da Sun da interface JdbcRowSet é JdbcRowSetImpl; Alguns bancos de dados podem fornecer suas próprias implementações de RowSet; O método JdbcRowSet setUrl() especifica o URL do BD; O método JdbcRowSet setUsername() especifica o nome de usuário; O método JdbcRowSet setPassword() especifica a senha; O método Jdbc-RowSet setCommand() especifica a consulta SQL que será usada para preeencher o RowSet. Slide 21 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education O método JdbcRowSet execute() executa a consulta SQL; O método execute() realiza quatro ações: ◦ Estabelece uma Connection com o banco de dados; ◦ Prepara a consulta Statement; ◦ Executa a consulta; ◦ Armazena o ResultSet retornado pela consulta; As consultas Connection, Statement e ResultSet são encapsuladas no objeto JdbcRowSet; Slide 22 O método JdbcRowSet close() fecha as consultas ResultSet, Statement e Connection do RowSet encapsulado. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 23 No JDK 6, o banco de dados “puro Java” de código-fonte aberto Java DB (a versão com a marca Sun do Apache Derby) vem com o JDK. Usamos o Java DB para demonstrar PreparedStatements. Antes de poder executar o aplicativo na próxima seção, você deve configurar o banco de dados AddressBook no Java DB. Utilizamos a versão integrada do Java DB. Há também uma versão de rede que executa de modo semelhante ao DBMS MySQL introduzido anteriormente no capítulo. Visite developers.sun.com/javadb/reference/docs/ e leia “Getting Started with Java DB” para obter instruções de instalação e configuração. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 24 O Java DB vem com vários arquivos em lote para configurá-lo e executá-lo. Deve configurar a variável de ambiente JAVA_HOME para consultar primeiro diretório de instalação do JDK. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 25 Instruções para Windows: Abra o arquivo em lote setEmbeddedCP.bat (localizado em C:\Program Files\Sun\JavaDB\bin), localize a linha @rem set DERBY_INSTALL= e mude-a para @set DERBY_INSTALL=C:\Program Files\Sun\JavaDB Abra um prompt de comando e use o comando para mudar os diretórios para C:\Program Files\Sun\JavaDB\bin. Então, digite setEmbeddedCP.bat e pressione Enter para configurar as variáveis de ambiente requeridas pelo Java DB. Mude para o diretório que contém o código desse exemplo. Esse diretório contém um script SQL address.sql que constrói o banco de dados AddressBook. Execute o comando "C:\Program Files\Sun\JavaDB\bin\ij" para iniciar a ferramenta de linha de comando para interagir com o Java DB. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 26 No prompt ij>, digite connect 'jdbc:derby:AddressBook;create=true;user=deitel;pass word=deitel'; para criar o banco de dados AddressBook no diretório atual. Esse comando também cria o usuário deitel com a senha deitel para acessar o banco de dados. Para criar a tabela de banco de dados e inserir dados de exemplo no banco de dados, digite run 'address.sql' Para terminar a ferramenta de linha de comando Java DB, digite exit; Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 27 A interface PreparedStatement permite criar instruções SQL compiladas que executam mais eficientemente do que os objetos Statement. Pode também especificar parâmetros, tornando-os mais flexíveis do que as Statements. Os programas podem executar a mesma consulta repetidamente com valores de parâmetro diferentes. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 28 Para localizar todos os títulos de livro de um autor com um sobrenome e um nome específicos: PreparedStatement authorBooks = connection.prepareStatement( "SELECT LastName, FirstName, Title " + "FROM Authors INNER JOIN AuthorISBN " + "ON Authors.AuthorID=AuthorISBN.AuthorID " + "INNER JOIN Titles " + "ON AuthorISBN.ISBN=Titles.ISBN " + "WHERE LastName = ? AND FirstName = ?" ); Os dois pontos de interrogação (?) são um espaço reservado para valores que serão passados como parte da consulta ao banco de dados. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 29 Antes de executar uma PreparedStatement, o programa deve especificar os valores de parâmetro utilizando os métodos set da interface PreparedStatement. Para a consulta anterior, ambos os parâmetros são strings que podem ser configuradas com o método PreparedStatement setString como mostrado a seguir: authorBooks.setString( 1, "Deitel" ); authorBooks.setString( 2, "Paul" ); Os números de parâmetro são contados a partir de 1, iniciando com o primeiro ponto de interrogação (?). A interface PreparedStatement fornece métodos set para cada tipo SQL suportado. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 30 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 31 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 32 Nosso banco de dados Java DB AddressBook contém uma tabela Addresses com as colunas addressID, FirstName, LastName, Email e PhoneNumber. A coluna addressID é a chamada coluna de identidade. Essa é a maneira padrão SQL para representar uma coluna autoincrementada. O script SQL que fornecemos para esse banco de dados utiliza a palavra-chave IDENTITY de SQL para marcar a coluna addressID como uma coluna de identidade. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 33 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 34 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 35 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 36 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 37 Invoque o método Connection prepareStatement para criar uma PreparedStatement. Chamar o método PreparedStatement executeQuery retorna um ResultSet contendo as linhas que correspondem à consulta. O método PreparedStatement executeUpdate executa a instrução SQL que modifica o banco de dados. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 38 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 39 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 40 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 41 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 42 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 43 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 44 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 45 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 46 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 47 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 48 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 49 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 50 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 51 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 52 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 53 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 54 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 55 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 56 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 57 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 58 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 59 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 60 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 61 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 62 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 63 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 64 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 65 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 66 Muitos sistemas de gerenciamento de bancos de dados podem armazenar instruções de SQL individuais ou conjuntos de instruções de SQL em um banco de dados, de modo que os programas que acessam esse banco de dados possam invocá-las. Tais coleções identificadas de instruções SQL são chamadas de procedures armazenadas. O JDBC permite aos programas invocar procedures armazenadas usando objetos que implementam a interface CallableStatement. Além disso, CallableStatements podem especificar parâmetros de saída em que uma procedure armazenada pode colocar valores de retorno. A interface também inclui métodos para obter os valores de parâmetros de saída retornados de uma procedure armazenada. Para aprender mais sobre CallableStatements, visite java.sun.com/javase/6/docs/technotes/guides/jdbc/get start/ callablestatement.html#999652 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 67 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 68 Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 69 Muitos aplicativos do banco de dados impõem garantias de que uma série de inserções, atualizações e exclusões no banco de dados executem corretamente antes de os aplicativos continuarem o processamento da próxima operação de banco de dados. O processamento de transação permite que um programa que interage com um banco de dados trate uma operação de banco de dados (ou conjunto de operações) como uma operação única. Essa operação também é conhecida como operação atômica ou transação. No fim de uma transação, pode-se tomar a decisão de confirmar a transação ou reverter a transação. Confirmar a transação finaliza a(s) operação(ões) de banco de dados. A reversão da transação deixa o banco de dados no seu estado anterior à operação de banco de dados. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education Slide 70 O método Connection setAutoCommit especifica se cada instrução SQL é confirmada depois de ser completada (um argumento true) ou se várias instruções SQL devem ser agrupadas como uma transação (um argumento false). Se o argumento para setAutoCommit for false, o programa deve seguir a última instrução SQL na transação com uma chamada para o método Connection commit ou método Connection rollback. A interface Connection também fornece o método getAutoCommit para determinar o estado autocommit para Connection. Deitel/Deitel, 8e. • Java – Como programar • Copyright © 2010 Pearson Education