capítulo 35 - rui rossi · xml bancode dados mysql postgresql oracle. rui rossi dos santos...

53
Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Cap Cap í í tulo 35 tulo 35 Sistemas de Banco de Sistemas de Banco de Dados Dados

Upload: letruc

Post on 11-Nov-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

CapCapíítulo 35tulo 35Sistemas de Banco de Sistemas de Banco de

DadosDados

Page 2: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Objetivos do Capítulo

� Instalar e configurar um sistema gerenciador de banco de dados relacional.

� Apresentar a API do Java que permite aos aplicativos acessarem bancos de dados de diferentes fornecedores: a JDBC.

� Indicar como realizar operações fundamentais de manipulação de registros: inclusão, consulta, exclusão e alteração.

� Analisar os recursos que permitem extrair dados relativos àestrutura de um banco de dados ou de um resultado produzido por uma consulta.

Page 3: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Introdução

� Persistência: gravação em mecanismo não volátil� Arquivos

� TXT

� XML

� Banco de dados�MySQL

� PostgreSQL

�Oracle

Page 4: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Introdução

� SGBD� Relacional (SGBDR)

� Tabelas (Entidades)o Colunas (Campos ou Atributos)

o Linhas (Registros ou Tuplas)

� Relacionamentos (Chaves Estrangeiras)

� Orientado a Objetos (SGBDOO)�Objetos

� Ex.: DB4O

Page 5: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Introdução

� SQL (Structured Query Language)� DDL (Data Definition Language)

� CREATE DATABASE

� DROP TABLE

� CREATE TABLE

� ALTER TABLE

� DML (Data Manipulation Language)� INSERT

�UPDATE

� DELETE

� SELECT

Page 6: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Introdução

� API: JDBC� Pacote: java.sql

� Classes:� Date

� DriverManager

� Time

� Interfaces� Connection

� DataBaseMetaData

� PreparedStatement

� ResultSet

� ResultSetMetaData

� Statement

� Exceções� SQLException

Page 7: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Servidor de Banco de Dados

� MySQL Server� Web site: http://www.mysql.com

� Uso livre: MySQL Community Server

� Instalação� Pular criação de conta (Skip Sign-Up)

� Configurar a instância do servidor� Assistente: MySQL Server Instance Configuration Wizard

� Tipo de configuração: Standard Configuration

� Install As Windows Service

� Include Bin Directory in Windows PATH

� Senha do root

Page 8: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Servidor de Banco de Dados

� Comando: testando a conectividade

mysqladmin –u root –p ping

Opções:� -u: especifica o login do usuário

� -p: especifica que a senha do usuário deverá ser solicitada.

Page 9: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Servidor de Banco de Dados

� Comando: iniciar manualmente o servidor

mysqld --standalone

� Comando: encerrar manualmente o servidor

mysqladmin -u root -p shutdown

Page 10: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Driver JDBC

� Intermediário: aplicativo Java e banco de dados

� Tipos:� Tipo 1: emprega a API ODBC (Open DataBase Connectivity) para realizar toda a comunicação com o banco de dados e mapeia a chamada a cada método da JDBC para uma função ODBC.

� Tipo 2: utiliza bibliotecas escritas em código nativo da máquina cliente e converte cada chamada de método JDBC para uma chamada a esta biblioteca nativa.

� Tipo 3: converte cada chamada de método JDBC para uma chamada de rede enviada a um servidor que utiliza um protocolo independente de banco de dados. Este servidor exerce a função de middleware, ou seja, ele funciona como um componente intermediário entre a máquina cliente e o banco de dados.

� Tipo 4: é um driver completamente escrito em Java e converte todas as chamadas a métodos JDBC diretamente para o protocolo específico do banco de dados.

Page 11: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Driver JDBC

� Comparativo:� Tipo 1: perde em eficiência por ter de converter cada chamada para o padrão ODBC e requer que cada máquina cliente tenha o driver ODBC instalado.

� Tipo 2: tem melhor performance que o anterior, mas requer que as bibliotecas do banco de dados estejam instaladas em cada máquina cliente e a disponibilidade delas depende do sistema operacional utilizado.

� Tipo 3: requer a construção de um servidor intermediário e a escrita de código específico do banco de dados utilizado.

� Tipo 4: tem uma performance consideravelmente melhor que as opções anteriores por estabelecer uma comunicação direta com o banco de dados. Para que ele funcione, basta incluí-lo junto àaplicação que será utilizada para o acesso ao banco de dados.

Page 12: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Driver JDBC

� MySQL Connector: Driver JDBC Tipo 4� Arquivo: mysql-connector-java-5.1.12-bin.jar (716KB)

Page 13: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Criação de um Banco de Dados

Page 14: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Criação de um Banco de Dados

� Procedimento via linha de comando:� No Windows:

mysql -u root –p

source C:\PCJ\Cap35\comercio.sql

� No Linux:mysql -u root –p

source /home/rui/PCJ/Cap35/comercio.sql

� Conferência:show databases;

show tables from comercio;

Page 15: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Criação de um Banco de Dados

� Procedimento com ferramentas visuais:� MySQL Administrator:

�Open Backup File (Comercio 20100413 0013.sql)

� Start Restore

� MySQL Query Browser:�Menu: Arquivo -> Open Script (Comercio 20100413 0013.sql)

�Menu: Script -> Execute

Page 16: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Conexão com o Banco de Dados

� Registrar o driver JDBC

Class.forName("com.mysql.jdbc.Driver");

� Abrir uma conexão com o banco de dados

Connection conexao = DriverManager.getConnection(

"jdbc:mysql://localhost/comercio","root","root");

� Configurar a conexão

conexao.setAutoCommit(false);

conexao.setTransactionIsolation(

Connection.TRANSACTION_READ_COMMITTED);

Page 17: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Conexão com o Banco de Dados

� Fechar a conexão

conexao.close();

� Confirmar transação

conexao.commit();

� Cancelar transação

conexao.rollback();

Page 18: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Conexão com o Banco de Dados

� Interface java.sql.Connection� Métodos:

� void close( ) throws SQLException

� boolean isClosed( ) throws SQLException

� void setAutoCommit(boolean autoCommit) throws SQLException

� boolean getAutoCommit( ) throws SQLException

� void commit( ) throws SQLException

� void rollback( ) throws SQLException

� void setTransactionIsolation(int level) throws SQLException

� int getTransactionIsolation( ) throws SQLException

� Statement createStatement( ) throws SQLException

� PreparedStatement prepareStatement(String sql, intautoGeneratedKeys) throws SQLException

� CallableStatement prepareCall(String sql) throws SQLException

� DataBaseMetaData getMetaData( ) throws SQLException

Page 19: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Conexão com o Banco de Dados

� Inconsistências comuns em ambiente concorrente:

� Dirty read (leitura suja): uma transação lê informações que ainda não foram confirmadas por outra transação.

� Non-repeatable read (leitura não-repetida): uma transação recupera um mesmo registro por duas vezes e os valores obtidos são diferentes em função de mudanças realizadas no mesmo por outras transações.

� Phantom read (leitura fantasma): uma transação seleciona um conjunto de registros por duas vezes consecutivas e a quantidade de registros recuperados em cada uma delas édiferente em função de terem sido excluídos ou acrescentados registros por outras transações.

Page 20: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Conexão com o Banco de Dados

� Interface java.sql.Connection� Atributos usados no o método setTransactionIsolation( ):

� TRANSACTION_READ_UNCOMMITED: permite que os três tipos de inconsistências.

� TRANSACTION_READ_COMMITED: previne dirty reads, mas permiteque non-repeatable reads e phantom reads ocorram.

� TRANSACTION_REPEATABLE_READ: previne dirty reads e non-repeatable reads, mas permite que phantom reads ocorram.

� TRANSACTION_SERIALIZABLE: previne os três tipos de inconsistências supracitadas.

Page 21: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Conexão com o Banco de Dados

� Código 35.1 – comercio.sql

� Código 35.2 – ConexaoComercio.java

� Código 35.3 – TesteConexao.java

Page 22: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Inclusão de Registros

� Instrução INSERT

� Sintaxe

INSERT INTO <TABELA> VALUES(<Valor1>,<Valor2>,..,<ValorN>)

� Exemplos

INSERT INTO CATEGORIA VALUES(1,’Livros’)

INSERT INTO CATEGORIA(DESCRICAO) VALUES(’Livros’)

Page 23: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Inclusão de Registros

� Passos:� Abrir uma conexão

� Enviar uma instrução INSERT� Preparar a instrução (PreparedStatement)

� Definir valores para os parâmetros

� Executar a instrução

� Confirmar a transação

� Recuperar a chave gerada (opcional)

Page 24: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Inclusão de Registros

� ExemploPreparedStatement pst = conexao.prepareStatement("INSERT INTO CATEGORIA (DESCRICAO) VALUES(?)",Statement.RETURN_GENERATED_KEYS);

pst.setString(1, “Livro”);pst.executeUpdate();conexao.commit();ResultSet rs = pst.getGeneratedKeys();rs.next();int chave_primaria = rs.getInt(1);

� java.sql.ConnectionPreparedStatement prepareStatement(String sql, int autoGenerateKeys) throws SQLException

� java.sql.Statement� Atributos:

� RETURN_GENERATED_KEYS�NO_GENERATED_KEYS

Page 25: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Inclusão de Registros

� Métodos de java.sql.PreparedStatement� void setString(int parameterIndex, String x)

� void setDate(int parameterIndex, java.sql.Date x)

� void setTime(int parameterIndex, java.sql.Time x)

� void setInt(int parameterIndex, int x)

� void setDouble(int parameterIndex, double x)

� int executeUpdate( ) throws SQLException

� ResultSet getGeneratedKeys( ) throws SQLException

� Métodos de java.sql.ResultSet� boolean next( ) throws SQLException

� int getInt(int columnIndex) throws SQLException

� int getString(int columnIndex) throws SQLException

Page 26: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Inclusão de Registros

� Código 35.4 – JFCategoriaIncluir.java

Page 27: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Recuperação de Registros

� Instrução SELECT

� Sintaxe

SELECT <CAMPOS> FROM <TABELA>

WHERE <CONDIÇÃO>

ORDER BY <CAMPO>

� Exemplos

SELECT * FROM CATEGORIA

ORDER BY DESCRICAO

SELECT * FROM CATEGORIA

WHERE (CODIGO <= 5) AND (DESCRICAO LIKE ‘%im%’)

ORDER BY DESCRICAO

Page 28: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Recuperação de Registros

� Passos:� Abrir uma conexão

� Enviar uma instrução SELECT� Criar o objeto responsável pelo envio da instrução (Statement)

� Executar a instrução

� Percorrer os registros recuperados

� Exemplo

Statement stm = conexao.createStatement();

ResultSet rs = stm.executeQuery("SELECT * FROM CATEGORIA");

while(rs.next( ))

System.out.println(rs.getInt(1) + “ - “ + rs.getString(2));

Page 29: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Recuperação de Registros

� Código 35.5 – JFCategoriaConsultar.java

Page 30: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Alteração de Registros

� Instrução UPDATE

� Sintaxe

UPDATE <TABELA>

SET <CAMPO1> = <VALOR1>,<CAMPO2> = <VALOR2>

WHERE <CONDIÇÃO>

� Exemplos

UPTADE CATEGORIA

SET DESCRICAO = ‘Perfumaria e beleza’

WHERE CODIGO = 5

Page 31: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Alteração de Registros

� Passos:� Abrir uma conexão

� Enviar uma instrução UPDATE� Preparar a instrução (PreparedStatement)

� Definir valores para os parâmetros

� Executar a instrução

� Confirmar a transação

� Recuperar a quantidade de registros afetada (opcional)

Page 32: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Alteração de Registros

� Exemplo

PreparedStatement pst = conexao.prepareStatement(

"UPDATE CATEGORIA SET DESCRICAO = ? WHERE CODIGO = ?");

pst.setString(1, “Perfumaria e beleza”);

pst.setInt(2, 5);

pst.executeUpdate();

conexao.commit();

if (pst.getUpdateCount() > 0) System.out.println(“Alterado!”);

else System.out.println(“Registro não existe!”);

Page 33: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Alteração de Registros

� Código 35.6 – JFCategoriaAlterar.java

Page 34: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exclusão de Registros

� Instrução DELETE

� Sintaxe

DELETE FROM <TABELA>

WHERE <CONDIÇÃO>

� Exemplos

DELETE FROM CATEGORIA

WHERE CODIGO = 1

Page 35: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exclusão de Registros

� Passos:� Abrir uma conexão

� Enviar uma instrução DELETE� Preparar a instrução (PreparedStatement)

� Definir valores para os parâmetros

� Executar a instrução

� Confirmar a transação

� Recuperar a quantidade de registros afetada (opcional)

Page 36: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exclusão de Registros

� Exemplo

PreparedStatement pst = conexao.prepareStatement(

"DELETE FROM CATEGORIA WHERE CODIGO = ?");

pst.setInt(1, 10);

pst.executeUpdate();

conexao.commit();

if (pst.getUpdateCount() > 0) System.out.println(“Excluído!”);

else System.out.println(“Registro não existe!”);

Page 37: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exclusão de Registros

� Código 35.7 – JFCategoriaExcluir.java

Page 38: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Recuperação de Metadados

� Metadados� Dados sobre dados

� Descrições dos dados

� Estrutura dos dados

� Objetivo� Análise dinâmica sobre a estrutura do banco

� Análise dinâmica sobre um conjunto de resultados

Page 39: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Recuperação de Metadados

� API:� java.sql.Connection

� DatabaseMetaData getMetaData( )

� java.sql.DatabaseMetaData� ResultSet getCatalogs( )

� ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

� ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

� java.sql.ResultSet� ResultSetMetaData getMetaData( )

� java.sql.ResultSetMetaData� int getColumnCount( )

� String getColumnLabel(int column)

� int getColumnType(int column)

Page 40: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Recuperação de Metadados

� Código 35.8 – ModeloGrade.java

� Código 35.9 – DBExplorer.java

Page 41: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Processamento de Instruções SQL

� Código 35.10 – ProcessadorSQL.java

Page 42: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Camada de Transferência:� Categoria.java

� Produto.java

� Cliente.java

� Item.java

� Pedido.java

Categoria

-

-

codigo

descricao

: int

: String

+

+

+

+

+

+

+

+

+

+

Categoria ()

Categoria (int codigo, String descricao)

getCodigo ()

getDescricao ()

setCodigo (int codigo)

setCodigo (String codigo)

setDescricao (String descricao)

toString ()

equals (Object obj)

hashCode ()

: int

: String

: void

: void

: void

: String

: boolean

: int

Page 43: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Camada de Persistência� ConexaoComercio.java

� CategoriaDAO.java

� ProdutoDAO.java

� ClienteDAO.java

� ItemDAO

� PedidoDAO

Page 44: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Camada de Persistência

cc

cc

cc

cc

cc

CategoriaDAO

- cc : ConexaoComercio

+

+

+

+

+

+

+

+

CategoriaDAO ()

incluir (Categoria c)

alterar (Categoria c)

excluir (int codigo)

carregarGrade ()

carregarCombo ()

pesquisar (int codigo)

pesquisar (String codigo)

: void

: void

: void

: ResultSet

: Vector<Categoria>

: Categoria

: CategoriaClienteDAO

ConexaoComercio

- conexao : Connection

+

+

+

+

+

ConexaoComercio ()

getConexao ()

fechar ()

confirmarTransacao ()

cancelarTransacao ()

: Connection

: void

: void

: void

ItemDAO

- cc : ConexaoComercio

+

+

ItemDAO ()

incluir (Item item) : void

PedidoDAO

- cc : ConexaoComercio

+

+

PedidoDAO ()

incluir (Pedido p) : void

ProdutoDAO

- cc : ConexaoComercio

+

+

+

+

+

+

+

+

ProdutoDAO ()

incluir (Produto c)

alterar (Produto c)

excluir (int codigo)

carregarGrade ()

carregarCombo ()

pesquisar (int codigo)

pesquisar (String codigo)

: void

: void

: void

: ResultSet

: Vector<Produto>

: Produto

: Produto

Page 45: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Camada de Apresentacao:� ModeloGrade

� IFCadastro

� IFCategoria

� IFProduto

� IFCliente

� IFPedidoRegistrar

� DesktopImagem

� JFPrincipal

� Classe Principal:� Principal

desktop

DesktopImagem

JDesktopPane

IFCadastro

JInternalFrame

IFCategoria

IFCliente

IFPedidoRegistrar

IFProduto

JFPrincipal

JFrameModeloGrade

AbstractTableModel

Page 46: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Janelas: � IFCategoria

� IFProduto

Page 47: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Janelas:� IFCliente

Page 48: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Janelas: � IFPedidoRegistrar

Page 49: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Estudo de Caso: Registro de Pedidos

� Janelas: � JFPrincipal

Page 50: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 1

� Amplie o sistema de registro de pedidos que fora apresentado neste capítulo e acrescente uma janela que permita registrar a entrega de um pedido.� Esta janela deve ter apenas uma grade e um botão.

� A grade deve apresentar todos os pedidos que ainda se encontram abertos (com o status igual à ‘A’).

� O botão deverá ser rotulado como “Fechar Pedido” e servirá para marcar o pedido como entregue.

� Quando um pedido for marcado como entregue, seu status deve ser modificado para ‘F’ (Fechado) e ele deve ser eliminado imediatamente da grade.

Page 51: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 2

� Amplie o sistema de registro de pedidos que fora apresentado neste capítulo e acrescente uma janela que permita consultar todos os pedidos que foram registrados entre duas datas.� Esta janela deve conter dois campos de texto formatados para captar a data inicial e a data final do período desejado, deve ter uma grade para apresentar os registros e um botão para acionar a consulta.

� Esta janela também deve ter uma caixa de combinação que permita selecionar uma dentre três opções: visualizar apenas os pedidos que encontram-se abertos, apenas os pedidos fechados ou ambos.

Page 52: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Exercício 3

� Amplie o sistema de registro de pedidos que fora apresentado neste capítulo e acrescente uma janela que permita realizar o cadastro de funcionários.� O registro de cada funcionário deverá ser composto pelos seguintes dados: um código numérico, seu nome completo, seu CPF, seu RG, seu telefone, seu e-mail, sua data de nascimento e seu salário.

� Antes de criar esta janela, acrescente uma nova tabela no banco de dados e a chame de FUNCIONARIO.� Esta tabela deverá ter um campo para cada um dos dados supracitados.

� Defina o código do funcionário como um campo que seja incrementado pelo próprio banco de dados.

Page 53: Capítulo 35 - Rui Rossi · XML Bancode dados MySQL PostgreSQL Oracle. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Introdução SGBD Relacional(SGBDR)

Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Contato

Com o autor:

Rui Rossi dos Santos

E-mail: [email protected]

Web Site: http://www.ruirossi.pro.br

Com a editora:

Editora NovaTerra

Telefone: (21) 2218-5314

Web Site: http://www.editoranovaterra.com.br