Luiz Carlos d´[email protected]
SJCP
Java Avançado
Conceitos de aplicações que acessam banco de dados
Luiz Carlos d´Oleron – [email protected]
O que é um Banco de Dados?
• É um software capaz de armazenar, atualizar e disponibilizar, de forma segura e eficiente, conjuntos de dados
• Há vários tipos de BD: Relacionais, Orientado a Objetos, etc...
• Nas aplicações de hoje em dia, se sobressai o uso de banco de dados relacionais, que são aquele que conhecem e fazem valer leis que regem as relações entre os dados
Luiz Carlos d´Oleron – [email protected]
O que é um Banco de Dados?
• Um BD relacional é constituído de várias databases, que são espécie de ilhas de dados
• DataBases são compostas de tabelas, view e podem ser acessadas por vários usuários (de formas diferentes!)
• Quando JDBC se conecta a um banco de dados relacional, ele faz isso acessando especificamente uma determinada database
• No nosso curso, usaremos um banco de dados relacional MySQL
Luiz Carlos d´Oleron – [email protected]
O que é uma tabela?
• Tabela, ou entidade, é uma estrutura que define como os dados serão armazenados
• Por exemplo, nossa tabela Tab_Clientes
Luiz Carlos d´Oleron – [email protected]
O que é uma tabela?
• Tabelas possuem nomes únicos dentro da database
• Ela é composta de campos (conhecidos também como atributos)
• Esses campos possuem características. Essas características dependem do tipo do campo
• Deve existir, em toda tabela, um campo especial, chamado de Chave Primária (primary key)
Luiz Carlos d´Oleron – [email protected]
O que é uma tabela?
• Costumamos dizer que uma tabela possui vários registro, cada registro possui dados no formato dos campos da tabela
Luiz Carlos d´Oleron – [email protected]
Chave Primária – Primary Key
• Conceito essencial para o entendimento do funcionamento e uso de banco de dados
• Dentro de uma tabela, não poderá haver dois registro com o mesmo valor de PK
• Uma PK identifica unicamente um registro
• Podem ser simples ou composta
Luiz Carlos d´Oleron – [email protected]
Chave Primária – Primary Key
• Valores de negócio, como nº de CPF, RG ou telefone não devem ser usados como PK, mesmo que sejam “Chaves de Negócio”
• No nosso exemplo, a PK é o campo código
• Assim, não existe dois clientes com o mesmo código
• Campos auto-increment são ótimas chaves
• Chaves primárias otimizam as consultas ao banco, simplificando o trabalho da aplicação e do BD
• Toda tabela deve ter uma!
Luiz Carlos d´Oleron – [email protected]
Relacionamentos
• Uma tabela pode se relacionar com outra
• Por exemplo, podemos armazenar todos os números de telefone dos nossos clientes
• Como um cliente pode possuir vários números de telefone, temos um relacionamento do tipo 1-para-N (ou 1-para-muitos)
• Como exemplo, implementamos isso com uma tabela nova chamada tab_telefone
Luiz Carlos d´Oleron – [email protected]
Relacionamentos• A tab_telefone é uma tabela como outra qualquer• Seus campos podem ser de qualquer tipo• Entretanto, o banco precisa saber como relacionar um determinado
telefone a um determinado cliente• Isto é feito através das Chaves Estrangeiras (Forein Key - FK)
Luiz Carlos d´Oleron – [email protected]
Chave Estrangeira
• É um campo de um registro que identifica um outro registro de outra tabela.
• Em uma tabela, é possível ter vários registros com o mesmo valor para uma chave estrangeira
• Um tabela pode possuir várias FK
• O valor de uma FK é o valor da PK do registro associado na outra tabela
Luiz Carlos d´Oleron – [email protected]
Relacionamentos• Existem relacionamentos do tipo um-para-um, um-para-muitos e muitos-
para-muitos
• O banco pode ter ferramentas para garantir a “Integridade Referencial”
• Por exemplo, o banco pode garantir que não exista nunca um telefone associado a um cliente que não exista
• Existem umas ferramentas de cascade que devem ser usadas com cuidados
• Isto pode ser feito também na aplicação, pode ser feito no BD e na aplicação (ruim), ou em nenhum dos dois (péssimo)
Luiz Carlos d´Oleron – [email protected]
Exemplo: TesteRelacionamento.java
• A principal diferença desse exemplo par ao anterior está na consulta SQL:
• A diferença aqui é a cláusula INNER JOIN
Luiz Carlos d´Oleron – [email protected]
TesteRelacionamento.java• INNER JOIN serve para avisar ao banco de dados como ele deve
relacionar a tabela tab_clientes à tabela tab_telefone
• Várias tabelas podem ser relacionadas dentro de uma mesma instrução
• INNER JOIN deteriora enormemente a performance do banco, use com cuidado
• Normalmente, é possível quebra uma instrução com INNER JOIN em várias outras, melhorando a performance da aplicação
Luiz Carlos d´Oleron – [email protected]
TesteRelacionamento.java
• A forma de acessar os campos do registro permaneceu inalterada
• Obviamente, aumentamos a quantidade de campos
Luiz Carlos d´Oleron – [email protected]
TesteRelacionamento.java
• Criamos um método também somente para conectar. Isto é uma boa prática e facilitará nosso trabalho daqui para frente
Luiz Carlos d´Oleron – [email protected]
TesteRelacionamento.java
• Atente para a exceção java.sql.SQLException
• Os métodos da API JDBC normalmente lançam java.sql.SQLException para avisar sobre problemas na infra-estrutura ou na forma da aplicação acessar o banco
• Podemos lançar também java.sql.SQLException, de forma a deixar o código mais homogêneo.
Top Related