Anda di halaman 1dari 171

Java Como Programar,

8/E

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

Um banco de dados uma coleo organizada de dados.


Um sistema de gerenciamento de bancos de dados (database management
system DBMS) fornece mecanismos para armazenar, organizar, recuperar e
modificar dados para muitos usurios.
SQL a linguagem padro internacional utilizada quase universalmente com
bancos de dados relacionais para realizar consultas e para manipular dados.
Sistemas de gerenciamento de banco de dados relacional (RDBMSs) populares
Microsoft SQL Server
Oracle
Sybase
IBM DB2
Informix
PostgreSQL
MySQL
O JDK vem agora com um RDBMS puro Java chamado Java DB a verso da
Sun para o Apache Derby.
Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 6

Os programas Java comunicam-se com bancos de dados e manipulam seus dados


utilizando a Java Database Connectivity (JDBC) API.
Um driver JDBC permite aos aplicativos Java conectar-se a um banco de dados
em um DBMS particular e permite a voc manipular esse banco de dados
utilizando o JDBC API.

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

Um banco de dados relacional uma representao lgica de dados que permite


que os dados sejam acessados sem considerar sua estrutura fsica.
Um banco de dados relacional armazena dados em tabelas.
As tabelas so compostas de linhas e as linhas so compostas de colunas nas quais
os valores so armazenados.
Chave primria uma coluna (ou grupo de colunas) com um valor nico que
no pode ser duplicado em outras linhas.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 10

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 11

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 12

Agora fornecemos uma viso geral de bancos de dados relacionais no contexto de


um banco de dados books de exemplo que criamos para este captulo.
O banco de dados consiste em trs tabelas: Authors, AuthorISBN e Titles.
A tabela Authors consiste em trs colunas que mantm o nmero de ID nico,
nome e sobrenome de cada autor.
A tabela AuthorISBN consiste em duas colunas que mantm cada ISBN e o
nmero de ID do autor correspondente.
A tabela Titles consiste em quatro colunas que representam o ISBN, o ttulo, o
nmero de edio e o ano dos direitos autorais.
Chave estrangeira uma coluna em uma tabela que corresponde coluna de
chave primria em outra tabela.
A chave estrangeira ajuda a manter a Regra de Integridade Referencial cada
valor de chave estrangeira deve aparecer como outro valor de chave primria da
tabela.
H um relacionamento um para muitos entre uma chave primria e sua chave
estrangeira correspondente.
Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 13

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 14

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 15

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

Diagrama de relacionamento de entidade (entity-relationship ER) do banco


de dados books.
Mostra as tabelas de banco de dados e as relaes entre eles.
Os nomes em itlico so chaves primrias.
Uma chave primria da tabela identifica unicamente cada linha na tabela.
Cada linha deve ter um valor de chave primria, e esse valor deve ser nico na
tabela.
Isso conhecido como Regra de Integridade de Entidade.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 20

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 21

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 22

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 23

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 24

As vrias subsees a seguir discutem as palavras-chave de SQL listadas na


Figura 28.10 no contexto de consultas e instrues SQL.
Outras palavras-chave de SQL esto alm do escopo deste texto.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 25

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 26

Uma consulta de SQL seleciona linhas e colunas de uma ou mais tabelas em um


banco de dados.
O formato bsico de uma consulta SELECT
SELECT * FROM nomeDaTabela
em que o asterisco (*) indica que todas as colunas da tabela nomeDaTabela devem
ser recuperadas.
Para recuperar todos os dados na tabela Authors, utilize
SELECT * FROM Authors
Para recuperar somente colunas especficas de uma tabela, substitua o asterisco (*)
por uma lista dos nomes de coluna separados por vrgulas
SELECT AuthorID, LastName FROM Authors
Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 27

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 28

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 29

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 30

Na maioria dos casos, apenas linhas que atendem aos critrios de seleo so
selecionadas.
A SQL utiliza a clusula WHERE opcional em uma consulta para especificar os
critrios de seleo para a consulta.
A forma bsica de uma consulta com critrios de seleo
SELECT nomeDaColuna1, nomeDaColuna2, FROM
nomeDaTabela WHERE critrios
Para selecionar as colunas Title, EditionNumber e Copyright da tabela
Titles para a qual a data do Copyright maior que 2005, use a consulta
SELECT Title, EditionNumber, Copyright
FROM Titles
WHERE Copyright > '2005'
As strings em SQL so delimitadas por aspas simples (') em vez de aspas duplas
(").
Os critrios da clusula WHERE podem conter os operadores <, >, <=, >=, =, <> e
LIKE.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 31

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 32

O operador LIKE usado para correspondncia de padro com os curingas


percentagem (%) e sublinhado (_).
Um padro que contm um caractere porcentagem (%) procura strings que tenham
zero ou mais caracteres na posio do caractere porcentagem no padro.
Por exemplo, a seguinte consulta localiza as linhas de todos os autores cujo
sobrenome comea com a letra D:
SELECT AuthorID, FirstName, LastName
FROM Authors
WHERE LastName LIKE 'D%'

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

Um caractere sublinhado ( _ ) na string padro LIKE indica um nico curinga


nessa posio no padro.
Por exemplo, a seguinte consulta localiza as linhas de todos os autores cujos
sobrenomes comeam com qualquer caractere (especificado por _) seguido pela
letra o seguida por qualquer nmero de caracteres adicionais (especificado por %):
SELECT AuthorID, FirstName, LastName
FROM Authors
WHERE LastName LIKE '_o%'

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 37

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 38

As linhas no resultado de uma consulta podem ser classificadas em ordem


crescente ou decrescente utilizando a clusula ORDER BY opcional.
O formato bsico de uma consulta com uma clusula ORDER BY
SELECT nomeDaColuna1, nomeDaColuna2, FROM
nomeDaTabela ORDER BY coluna ASC
SELECT nomeDaColuna1, nomeDaColuna2, FROM
nomeDaTabela ORDER BY coluna DESC
ASC especifica a ordem ascendente (do mais baixo para o mais alto).
DESC especifica ordem descendente (do mais alto para o mais baixo).
coluna especifica a coluna em que a classificao baseada.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 39

Para obter a lista de autores em ordem crescente por sobrenome (), utilize a consulta
SELECT AuthorID, FirstName, LastName
FROM Authors
ORDER BY LastName ASC
Para obter a lista de autores em ordem decrescente por sobrenome (), utilize a consulta
SELECT AuthorID, FirstName, LastName
FROM Authors
ORDER BY LastName DESC
As mltiplas colunas podem ser utilizadas para classificao com uma clusula ORDER BY da
forma
ORDER BY coluna1 ordemDeClassificao, coluna2
ordemDeClassificao,
ordemDeClassificao ASC ou DESC.
Classifica todas as linhas em ordem crescente por sobrenome, e depois por nome.
SELECT AuthorID, FirstName, LastName
FROM Authors
ORDER BY LastName, FirstName

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

As clusulas WHERE e ORDER BY podem ser combinadas em uma consulta, como


em
SELECT ISBN, Title, EditionNumber, Copyright
FROM Titles
WHERE Title LIKE '%How to Program'
ORDER BY Title ASC
que retorna o ISBN, Title, EditionNumber e Copyright de cada livro na
tabela Titles que tem um Title terminando com "How to Program" e os
classifica em ordem crescente por Title.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 44

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 45

Os projetistas de banco de dados costumam dividir os dados relacionados em


tabelas separadas para assegurar que um banco de dados no armazene dados de
maneira redundante.
Frequentemente necessrio mesclar dados de mltiplas tabelas em um nico
resultado.
Isso chamado de juno, ou join, de tabelas.
Uma INNER JOIN mescla linhas de duas tabelas correspondendo valores em
colunas que so comuns s tabelas.
SELECT nomeDaColuna1, nomeDaColuna2,
FROM tabela1
INNER JOIN tabela2
ON tabela1.nomeDaColuna = tabela2.nomeDaColuna
A clusula ON especifica as colunas de cada tabela que so comparadas para
determinar as linhas que so mescladas.
Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 46

A consulta a seguir produz uma lista de autores acompanhados pelos ISBNs de


livros escritos por cada autor:
SELECT FirstName, LastName, ISBN
FROM Authors
INNER JOIN AuthorISBN
ON Authors.AuthorID = AuthorISBN.AuthorID
ORDER BY LastName, FirstName
A sintaxe nomeDaTabela.nomeDaColuna na clusula ON, chamada de nome
qualificado, especifica as colunas de cada tabela que devem ser comparados para
mesclar as tabelas.

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

A instruo INSERT insere uma linha em uma tabela.


INSERT INTO nomeDaTabela ( nomeDaColuna1,
nomeDaColuna2, , nomeDaColunaN )
VALUES ( valor1, valor2, , valorN )
onde nomeDaTabela a tabela na qual inserir a linha.
nomeDaTabela seguido por uma lista separada por vrgulas de nomes de
coluna entre parnteses
no necessria se a operao INSERT especificar um valor para cada coluna da
tabela na ordem correta
A lista de nomes de coluna seguida pela palavra-chave de SQL VALUES e uma
lista separada por vrgulas de valores entre parnteses.
Os valores especificados aqui devem corresponder s colunas especificadas depois
do nome da tabela tanto em ordem como em tipo.

Slide 50

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 51

A instruo INSERT
INSERT INTO Authors ( FirstName, LastName )
VALUES ( 'Sue', 'Smith' )
A instruo indica que os valores so fornecidos para as colunas FirstName e
LastName. Os valores correspondentes so 'Sue' e 'Smith'.
No especificamos um AuthorIDnesse exemplo porque AuthorID uma
coluna autoincrementada na tabela Authors.
Nem todo sistema de gerenciamento de bancos de dados suporta colunas
auto-incrementadas.

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

Uma instruo UPDATE modifica os dados em uma tabela.


UPDATE nomeDaTabela
SET nomeDaColuna1 = valor1, nomeDaColuna2 = valor2,
, nomeDaColunaN = valorN
Critrios WHERE
onde nomeDaTabela a tabela a atualizar.
nomeDaTabela seguido pela palavra-chave SET e uma lista separada por
vrgulas de pares nome/valor de coluna no formato nomeDaColuna = valor.
A clusula WHERE opcional fornece critrios que determinam quais linhas
atualizar.
A instruo UPDATE
UPDATE Authors
SET LastName = 'Jones'
WHERE LastName = 'Smith' AND FirstName = 'Sue'
indica que LastName receber o valor Jones para a linha em que LastName
igual a Smith e FirstName igual a Sue.
Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 56

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 57

Uma instruo DELETE de SQL remove as linhas de uma tabela.


DELETE FROM nomeDaTabela WHERE critrios
onde nomeDaTabela a tabela a partir da qual excluir.
A clusula WHERE opcional especifica os critrios utilizados para determinar quais
linhas excluir.
Se essa clusula for omitida, todas as linhas da tabela sero excludas.
A instruo DELETE
DELETE FROM Authors
WHERE LastName = 'Jones' AND FirstName = 'Sue'
exclui a linha para Sue Jones na tabela Authors.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 58

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 59

MySQL 5.0 Community Edition um sistema de gerenciamento de bancos de dados


de cdigo-fonte aberto que executa em muitas plataformas, incluindo Windows,
Solaris, Linux e Macintosh.
Informaes completas sobre o MySQL esto disponveis a partir de
www.mysql.com.
Para instalar o MySQL Community Edition:
Requisitos de instalao para sua plataforma:
dev.mysql.com/doc/refman/5.0/en/installing-cs.html
Download
dev.mysql.com/downloads/mysql/5.0.html
Execute o instalador.
Escolha Typical para Setup Type.
Para configurar o servidor selecione Standard Configuration.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 60

Para utilizar o MySQL com o JDBC, voc tambm precisa instalar o MySQL
Connector/J um driver JDBC que permite aos programas acessar bancos de
dados MySQL via JDBC.
O MySQL Connector/J pode ser baixado de
dev.mysql.com/downloads/connector/j/5.1.html
A documentao do Conector/J encontra-se em
dev.mysql.com/doc/connector/j/en/connector-j.html.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 61

Para que os exemplos no livro executem corretamente, voc precisa configurar


uma conta de usurio que permita aos usurios criar, excluir e modificar um banco
de dados.
Abra um prompt de comando e inicie o servidor do bancos de dados executando o
comando mysqld-nt.exe. Note que esse comando no tem sada ele
simplesmente inicia o servidor MySQL. No feche essa janela isso encerra o
servidor.
Inicie o monitor MySQL para poder configurar uma conta de usurio, abrir outro
prompt de comando e executar o comando mysql -h localhost -u root.
A opo -h indica o host (isto , computador) no qual o servidor MySQL est
executando nesse caso o seu computador local (localhost).
A opo -u indica a conta de usurio que ser utilizada para fazer login no
servidor root a conta de usurio padro criada durante a instalao para
permitir que voc configure o servidor.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 62

No prompt mysql>, digite


USE mysql;
para selecionar o banco de dados predefinido chamado mysql.
Adicione a conta de usurio deitel ao banco de dados predefinido mysql.
Execute os seguintes comandos no prompt mysql>:
create user 'deitel'@'localhost' identified by
'deitel;grant select, insert, update, delete,
create, drop, references, execute on *.* to
'deitel'@'localhost';
Isso cria o usurio deitel com os privilgios necessrios para criar os bancos
de dados utilizados neste captulo e manipul-los.
Digite o comando
exit;
para terminar o monitor MySQL.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 63

Para cada banco de dados MySQL que discutimos, fornecemos um script SQL em
um arquivo .sql que configura o banco de dados e suas tabelas.
Voc pode executar esses scripts no monitor MySQL.
Para executar o script books.sql:
Abra um prompt de comando e use o comando para mudar os diretrios para o
local que contenha o script books.sql.
Inicie o monitor MySQL digitando
mysql -h localhost -u deitel -p
A opo -p solicita a senha para a conta de usurio deitel. Quando solicitado,
insira a senha deitel.
Execute o script digitando
source books.sql;
Isso cria um novo diretrio chamado books no diretrio data do servidor
Digite exit; para terminar o monitor MySQL monitor.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 64

Nesta seo, apresentamos dois exemplos.


O primeiro exemplo introduz como se conectar a um banco de dados e consult-lo.
O segundo exemplo demonstra como exibir o resultado da consulta em um
componente JTable.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 65

O programa ilustra a conexo com o banco de dados, consultando o banco de dados


e processando o resultado.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 66

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

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

O URL do banco de dados identifica o nome do banco de dados ao qual se


conectar, bem como informaes sobre o protocolo utilizado pelo driver JDBC.
O JDBC 4.0 suporta a descoberta de driver automtica.
No mais necessrio carregar antes o driver de banco de dados.
Para assegurar que o programa pode localizar a classe de driver do banco de dados,
voc deve incluir a localizao da classe no classpath do programa ao executar o
programa.
Para o MySQL inclua o arquivo mysql-connector-java-5.1.7-bin.jar
(no diretrio C:\mysql-connector-java-5.1.7) no classpath do
programa, como em:
java -classpath
.;c:\mysql-connector-java-5.1.7\mysql-connector-java
-5.1.7-bin.jar
DisplayAuthors

Slide 70

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 71

Um objeto que implementa a interface Connection gerencia a conexo entre o


programa Java e o banco de dados.
Os objetos Connection permitem que os programas criem instrues SQL que
manipulam banco de dados.
O mtodo DriverManager static getConnection tenta se conectar ao
banco de dados especificado pelo seu URL.
Trs argumentos:
uma String que especifica o URL do banco de dados.
uma String que especifica o URL do banco de dados.
uma String que especifica o URL do banco de dados.

Deitel/Deitel,

(C) 2010 Pearson Education, Inc. Todos


os programar
direitos reservados.
8e. Java Como
Copyright

2010 Pearson Education

Slide 72

O URL jdbc:mysql://localhost/books especifica:


o protocolo de comunicao (jdbc).
o subprotocolo para comunicao (mysql).
a localizao do banco de dados (//localhost/books, onde localhost
o host executando o servidor MySQL ebooks o nome do banco de dados).
O subprotocolo mysql indica que o programa utiliza um subprotocolo especfico
ao MySQL para conectar-se ao banco de dados MySQL.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 73

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 74

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 75

O mtodo Connection createStatement obtm um objeto que


implementa a interface Statement (pacote java.sql).
Usado para enviar instrues SQL para o banco de dados.
O mtodo executeQuery do objeto Statement envia uma consulta para o
banco de dados.
Retorna um objeto que implementa a interface ResultSet e contm os
resultados da consulta.
Os mtodos ResultSet permitem que programa manipule o resultado da
consulta.
O ResultSetMetaData de um ResultSet descreve o contedo do
ResultSet.
Pode ser usado programaticamente para obter informaes sobre nomes de coluna
e tipos do ResultSet.
O mtodo ResultSetMetaData getColumnCount recupera o nmero de
colunas no ResultSet.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 76

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 77

A primeira chamada para o mtodo ResultSet next posiciona o cursor


ResultSet para a primeira linha.
Retorna o valor boolean true se for capaz de se posicionar na prxima linha;
caso contrrio, o mtodo retorna false.
O mtodo ResultSetMetaData getColumnType retorna um inteiro
constante da classe Types (pacote java.sql) que indica o tipo de uma coluna
especificada.
O mtodo ResultSet getInt retorna um valor de coluna como um int.
Os mtodos ResultSet get em geral recebem como um argumento um nmero
de coluna (como um int) ou um nome de coluna (como uma String) indicando
que valor da coluna obter.
O mtodo ResultSet getObject retorna um valor de coluna como um
Object.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 78

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 79

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 80

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 81

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 82

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 83

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 84

O seguinte exemplo (Figuras 28.25 e 28.28) permite ao usurio inserir qualquer


consulta no programa.
Exibe os resultados de uma consulta em uma JTable, usando um objeto
TableModel para fornecer os dados ResultSet para o JTable.
Jtable um componente GUI Swing que pode ser vinculado a um banco de
dados para exibir os resultados de uma consulta.
A classe ResultSetTable-Model realiza a conexo com o banco de dados via
uma TableModel e mantm o ResultSet.
A classe DisplayQueryResults cria a GUI e especifica uma instncia da
classe ResultSetTableModel para fornecer dados a Jtable.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 85

ResultSetTableModel sobrescreve os mtodos TableModel


getColumnClass, getColumnCount, getColumnName,
getRowCount e getValueAt (herdado de AbstractTableModel),

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 86

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 87

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 88

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 89

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 90

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 91

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 92

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 93

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 94

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 95

O mtodo Connection createStatement com dois argumentos recebe


o tipo e a concorrncia do result set (conjunto de resultados).
O tipo de conjunto de resultados especifica se o cursor do ResultSet
capaz de rolar em ambas as direes ou apenas encaminhar e se o ResultSet
sensvel a alteraes feitas nos dados subjacentes.
ResultSets que so sensveis a alteraes refletem essas modificaes
imediatamente depois de elas serem feitas com os mtodos da interface
ResultSet.
Se um ResultSet no for sensvel a alteraes, a consulta que produziu o
ResultSet deve ser novamente executada para refletir qualquer alterao
feita.
A concorrncia do conjunto de resultados especifica se o ResultSet pode
ser atualizado com os mtodos de atualizao do ResultSet.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 96

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 97

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 98

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 99

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 100

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 101

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 102

O mtodo ResultSetMetaData getColumnClassName obtm o nome


de classe completamente qualificado da coluna especificada.
O mtodo ResultSetMetaData getColumnCount obtm o nmero de
colunas no ResultSet.
O mtodo ResultSetMetaData getColumnName obtm o nome da
coluna no ResultSet.
O mtodo ResultSetResultSet absolute posiciona o cursor ResultSet
em uma linha especfica.
O mtodo ResultSet last posiciona o cursor ResultSet na ltima linha no
ResultSet.
O mtodo ResultSet getRow obtm o nmero da linha atual no
ResultSet.
O mtodo fireTableStructureChanged (herdado da classe
AbstractTableModel) notifica qualquer JTable usando esse objeto
ResultSetTableModel como seu modelo que a estrutura do modelo mudou.
Faz com que a JTable preencha novamente suas linhas e colunas com os novos
dados de ResultSet data.
Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 103

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 104

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 105

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 106

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 107

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 108

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 109

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 110

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 111

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 112

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 113

Qualquer varivel local que for utilizada em uma classe interna annima deve ser
declarada final; caso contrrio, ocorre um erro de compilao.
A classe TableRowSorter (do pacote javax.swing.table) pode ser usada
para classificar linhas em uma Jtable.
Quando o usurio clicar no ttulo de determinada coluna JTable, o
TableRowSorter interage com o TableModel subjacente para reordenar as
linhas com base nos dados dessa coluna.
O mtodo JTable setRowSorter especifica o TableRowSorter para
JTable.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 114

JTables podem mostrar agora subconjuntos dos dados do TableModel


subjacente.
Isso conhecido como filtragem dos dados.
O mtodo JTable setRowFilter especifica um RowFilter (do pacote
javax.swing) para um JTable.
O mtodo RowFilter static regexFilter recebe uma String contendo um
padro de expresso regular como seu argumento e um conjunto opcional de
ndices que especifica quais colunas filtrar.
Se nenhum ndice for especificado, ento todas as colunas so pesquisadas.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 115

A interface RowSet fornece vrios mtodos set que permite especificar as


propriedades necessrias para estabelecer uma conexo e criar uma Statement.
RowSet tambm fornece vrios mtodos get que retornam essas propriedades.
Dois 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 conexo.
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 conexo com o banco d e dados.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 116

O pacote javax.sql.rowset contm 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 rolvel e atualizvel por padro.
CachedRowSet, um RowSet desconectado, armazena os dados em cache de
um ResultSet na memria e desconecta-se do banco de dados.
Um objeto CachedRowSet rolvel e atualizvel por padro.
Tambm serializvel, ento ele pode ser passado entre aplicativos Java por uma
rede, como a Internet.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 117

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 118

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 119

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 120

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 121

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 122

O pacote com.sun.rowset fornece implementaes de referncia da Sun para


as interfaces no pacote javax.sql.rowset.
A implementao de referncia da Sun da interface JdbcRowSet
JdbcRowSetImpl.
Alguns bancos de dados podem fornecer suas prprias implementaes RowSet.
O mtodo JdbcRowSet setUrl especifica o URL do banco de dados.
O mtodo JdbcRowSet setUsername especifica o nome de usurio.
O mtodo JdbcRowSet setPassword especifica a senha.
O mtodo Jdbc-RowSet setCommand especifica a consulta SQL que ser
usada para preeencher o RowSet.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 123

O mtodo JdbcRowSet execute executa a consulta SQL.


O mtodo execute realiza quatro aes:
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 so encapsuladas no
objeto JdbcRowSet.
O mtodo JdbcRowSet close fecha as consultas ResultSet, Statement e
Connection do RowSet encapsulado.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 124

No JDK 6, o banco de dados puro Java de cdigo-fonte aberto Java DB (a


verso 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 prxima seo, voc deve configurar o
banco de dados AddressBook no Java DB.
Utilizamos a verso integrada do Java DB.
H tambm uma verso de rede que executa de modo semelhante ao DBMS
MySQL introduzido anteriormente no captulo.
Visite developers.sun.com/javadb/reference/docs/ e leia Getting
Started with Java DB para obter instrues de instalao e configurao.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 125

O Java DB vem com vrios arquivos em lote para configur-lo e execut-lo.


Deve configurar a varivel de ambiente JAVA_HOME para consultar primeiro
diretrio de instalao do JDK.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 126

Instrues 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 diretrios para
C:\Program Files\Sun\JavaDB\bin. Ento, digite
setEmbeddedCP.bat e pressione Enter para configurar as variveis de
ambiente requeridas pelo Java DB.
Mude para o diretrio que contm o cdigo desse exemplo. Esse diretrio contm
um script SQL address.sql que constri 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 127

No prompt ij>, digite


connect
'jdbc:derby:AddressBook;create=true;user=deitel;pass
word=deitel';
para criar o banco de dados AddressBook no diretrio atual. Esse comando
tambm cria o usurio 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 128

A interface PreparedStatement permite criar instrues SQL compiladas


que executam mais eficientemente do que os objetos Statement.
Pode tambm especificar parmetros, tornando-os mais flexveis do que as
Statements.
Os programas podem executar a mesma consulta repetidamente com valores de
parmetro diferentes.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 129

Para localizar todos os ttulos de livro de um autor com um sobrenome e um nome


especficos:
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 interrogao (?) so um espao reservado para valores que sero
passados como parte da consulta ao banco de dados.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 130

Antes de executar uma PreparedStatement, o programa deve especificar os


valores de parmetro utilizando os mtodos set da interface
PreparedStatement.
Para a consulta anterior, ambos os parmetros so strings que podem ser
configuradas com o mtodo PreparedStatement setString como mostrado a
seguir:
authorBooks.setString( 1, "Deitel" );
authorBooks.setString( 2, "Paul" );
Os nmeros de parmetro so contados a partir de 1, iniciando com o primeiro
ponto de interrogao (?).
A interface PreparedStatement fornece mtodos set para cada tipo SQL
suportado.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 131

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 132

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 133

Nosso banco de dados Java DB AddressBook contm uma tabela Addresses


com as colunas addressID, FirstName, LastName, Email e
PhoneNumber.
A coluna addressID a chamada coluna de identidade.
Essa a maneira padro 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 134

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 135

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 136

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 137

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 138

Invoque o mtodo Connection prepareStatement para criar uma


PreparedStatement.
Chamar o mtodo PreparedStatement executeQuery retorna um
ResultSet contendo as linhas que correspondem consulta.
O mtodo PreparedStatement executeUpdate executa a instruo SQL
que modifica o banco de dados.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 139

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 140

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 141

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 142

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 143

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 144

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 145

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 146

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 147

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 148

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 149

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 150

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 151

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 152

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 153

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 154

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 155

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 156

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 157

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 158

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 159

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 160

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 161

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 162

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 163

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 164

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 165

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 166

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 167

Muitos sistemas de gerenciamento de bancos de dados podem armazenar instrues


de SQL individuais ou conjuntos de instrues de SQL em um banco de dados, de
modo que os programas que acessam esse banco de dados possam invoc-las.
Tais colees identificadas de instrues SQL so chamadas de procedures
armazenadas.
O JDBC permite aos programas invocar procedures armazenadas usando objetos
que implementam a interface CallableStatement.
Alm disso, CallableStatements podem especificar parmetros de sada em
que uma procedure armazenada pode colocar valores de retorno.
A interface tambm inclui mtodos para obter os valores de parmetros de sada
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 168

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 169

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 170

Muitos aplicativos do banco de dados impem garantias de que uma srie de


inseres, atualizaes e excluses no banco de dados executem corretamente antes
de os aplicativos continuarem o processamento da prxima operao de banco de
dados.
O processamento de transao permite que um programa que interage com um
banco de dados trate uma operao de banco de dados (ou conjunto de operaes)
como uma operao nica.
Essa operao tambm conhecida como operao atmica ou transao.
No fim de uma transao, pode-se tomar a deciso de confirmar a transao ou
reverter a transao.
Confirmar a transao finaliza a(s) operao(es) de banco de dados.
A reverso da transao deixa o banco de dados no seu estado anterior operao
de banco de dados.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Slide 171

O mtodo Connection setAutoCommit especifica se cada instruo SQL


confirmada depois de ser completada (um argumento true) ou se vrias
instrues SQL devem ser agrupadas como uma transao (um argumento false).
Se o argumento para setAutoCommit for false, o programa deve seguir a
ltima instruo SQL na transao com uma chamada para o mtodo
Connection commit ou mtodo Connection rollback.
A interface Connection tambm fornece o mtodo getAutoCommit para
determinar o estado autocommit para Connection.

Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education