180 likes | 320 Views
Java Avançado. Conceitos de aplicações que acessam banco de dados. 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...
E N D
Luiz Carlos d´Oleronlcadb@cin.ufpe.brSJCP Java Avançado Conceitos de aplicações que acessam banco de dados
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
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
O que é uma tabela? • Tabela, ou entidade, é uma estrutura que define como os dados serão armazenados • Por exemplo, nossa tabela Tab_Clientes
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)
O que é uma tabela? • Costumamos dizer que uma tabela possui vários registro, cada registro possui dados no formato dos campos da tabela
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
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!
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
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)
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
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)
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
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
TesteRelacionamento.java • A forma de acessar os campos do registro permaneceu inalterada • Obviamente, aumentamos a quantidade de campos
TesteRelacionamento.java • Criamos um método também somente para conectar. Isto é uma boa prática e facilitará nosso trabalho daqui para frente
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.