Informatica Manual Do Professor Banco de Dados
Informatica Manual Do Professor Banco de Dados
Informatica Manual Do Professor Banco de Dados
Vice Governador
Domingos Gomes de Aguiar Filho
Secretária da Educação
Maria Izolda Cela de Arruda Coelho
Secretário Adjunto
Maurício Holanda Maia
Secretário Executivo
Antônio Idilvan de Lima Alencar
AGOSTO DE 2013
FORTALEZA/CEARÁ
Sumário do Manual
APRESENTAÇÃO ........................................................................................................ 3
OBJETIVOS DE APRENDIZAGEM.............................................................................. 5
EMENTA ...................................................................................................................... 8
CRONOGRAMA DE ATIVIDADES............................................................................... 9
OBJETIVO OPERACIONAL
COMPETÊNCIAS
Fazer modelagem conceitual de bancos de dados.
Fazer modelagem lógica de banco de dados
Gerenciar os sistemas de banco de dados.
Interligar os sistemas de banco de dados com a linguagem de programação
Java.
FUNDAMENTOS TEÓRICO-PRÁTICOS
FASE 1: Introdução a banco de dados
Compreender o conceito de banco de dados.
Identificar e saber decidir sobre a arquitetura do banco de dados.
FASE 2: Modelagem de banco de dados
Interpretar dados para a modelagem do banco.
Utilizar os dados descritos para criação de MER e DER independente do
SGBD utilizado.
Aplicar os principais conceitos estudados para desenvolver uma correta
modelagem do banco de dados.
FASE 3: Arquitetura de banco de dados e linguagem SQL
Compreender a importância de estudar a linguagem SQL.
Saber aplicar todos os comandos estudados da linguagem.
Definir a melhor estrutura DDL para o banco de acordo com a necessidade do
cliente.
FASE 3: Desenvolvimento do projeto
Interpretar a modelagem de um banco para um software de locadora.
Utilizar a API JDBC para a comunicação do banco de dados com a linguagem
Java.
Aplicar os conhecimentos adquiridos de SQL para a contrução do banco de
dados do SGBD Mysql.
Desenvolver um software aplicando os conceitos de orientação a objetos.
Utilizar componentes de interface gráfica da linguagem Java.
AÇÕES PEDAGÓGICAS
● Possibilitar a execução de várias atividades na resolução de problemas;
● Estimular as iniciativas dos alunos respeitando os acordos estabelecidos sobre
o trabalho a ser efetuado;
● Assegurar o acompanhamento periódico dos alunos;
● Intervir em casos de dificuldades ou de problemas;
● Guiar o processo de avaliação dos alunos fornecendo instrumentos tais como
questionário, grades de análise, estudo de casos, etc;
● Motivar os alunos a executar as atividades propostas;
● Fornecer aos alunos meio de avaliar seu progresso;
● Assegurar a disponibilidade da documentação pertinente.
● Permitir aos alunos a terem trocas entre eles sobre dificuldades e soluções
encontradas;
● Procurar integrar os conhecimentos adquiridos na elaboração de softwares
com o uso de banco de dados.
COMPETÊNCIA C1
Fazer modelagem conceitual de bancos de dados
CONTEXTO DE REALIZAÇÃO
A partir de: Introdução a banco de dados
Utilizando (elementos de auxílio à aprendizagem): brModelo
Com a ajuda de (material didático): Manual de aprendizagem de Banco de Dados.
Ambiente (local propício): Sala de aula e laboratório
COMPETÊNCIA C2
Fazer modelagem lógica de bancos de dados
CONTEXTO DE REALIZAÇÃO
A partir de: Modelagem Entidade-Relacionamento
Utilizando (elementos de auxílio à aprendizagem): MySQL Workbench
Com a ajuda de (material didático): Manual de aprendizagem de Banco de Dados.
Ambiente (local propício): Sala de aula e laboratório
COMPETÊNCIA C3
Gerenciar os sistemas de Banco de Dados
CONTEXTO DE REALIZAÇÃO
A partir de: Modelagem Relacional
Utilizando (elementos de auxílio à aprendizagem): Linguagem SQL no SGBD
MySQL
Com a ajuda de (material didático): Manual de aprendizagem de Banco de Dados.
Ambiente (local propício): Sala de aula e laboratório
COMPETÊNCIA C4
Interligar os sistemas de banco de dados com a linguagem de programação Java.
CONTEXTO DE REALIZAÇÃO
A partir de: Aprendizado em Banco de dados e POO/Java
Utilizando (elementos de auxílio à aprendizagem): IDE netbeans, SGBD MySQL
Com a ajuda de (material didático): Manual de aprendizagem de Banco de Dados.
Ambiente (local propício): Sala de aula e laboratório
Fórmulas matemática
Operadores relacionais
Proposições lógicas
Conceitos de estrutura lógica
Técnicas para resolução de problemas
DISCIPLINAS CONTRIBUTIVAS:
1 E1 E2 E3 E4 E1 E2 E3 E4 E5 E6 E1 E2 E3 E4 E1 E2 E3
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Escola Estadual de Educação Profissional Ensino Médio Integrado a Educação Profissional
Para os conceitos acima temos o seguinte exemplo: O ano 2013 não faz
nenhum sentido se você visualizá-lo sozinho. Se você agora analisar um
conjunto de dados relacionados (fato), como: “Brasil”, “2013”, “1º Lugar”, “Copa
das Confederações”. Esse fato registra algo do mundo real e a partir dele você
chega à informação de que “O Brasil foi campeão da Copa das Confederações
do ano de 2013”. Os metadados são algumas informações que você pode ter a
respeito de cada dado, por exemplo: “Brasil” (País – nome do dado, texto – tipo
do dado), 2013 (Ano – nome do dado, numérico – tipo do dado).
viria a mudar tudo isso. Apresentou um modelo relacional onde usuários, sem
conhecimento técnico, poderiam armazenar e extrair grandes quantidades de
informações de um banco de dados. Na época, ninguém percebeu que as
teorias obscuras de Codd desencadeariam uma revolução tecnológica
comparável ao desenvolvimento dos computadores pessoais e da internet.
EXERCÍCIOS
_______________________________________________________________
_________________
_______________________________________________________________
_______
_______________________________________________________________
___
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_____________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_____________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_____________________
Firebird
PESQUISA
EXERCÍCIOS
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
a.Atomicidade:
_______________________________________________________________
_____________________________________________________________
b.Consistência:
______________________________________________________________
_______________________________________________________________
c.Isolamento:
______________________________________________________________
_______________________________________________________________
d.Durabilidade:___________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
_______________________________________________________________
_______________________________________________________________
______________________________________________________________
EXERCÍCIOS
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
4.1. Entidades
PERGUNTAS RESPOSTAS
Há necessidade de guardarmos a Sim, temos que guardas as informações de
informação dos pedidos? todos os pedidos.
Pode haver mais de um pedido? Sim, existem diversos pedidos e não apenas
um.
Existe uma chave capaz de identificar cada Sim, cada pedido realizado possui um número
um dos pedidos unicamente? único para controle de pedidos.
PERGUNTAS RESPOSTAS
Há necessidade de guardarmos a
informação da quantidade?
Pode haver mais de uma quantidade?
4.2. Atributos
CHAVE PRIMÁRIA
4.3. Relacionamento
Representação de um relacionamento
EXERCÍCIOS
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
3. Defina atributo e cite 4 atributos para cada entidade que você citou na
questão 2.
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________________
_______________________________________________________________
_______________________________________________________________
5. Explique o que é chave primária e para que ela serve. Apresente 3 exemplos
de atributos que poderiam ser chave primária e explique o porque.
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________________
6. Uma chave primária pode assumir valor nulo? Explique sua resposta.
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
__
Máxima 1 ou N Máxima 1 ou N
Mínima 0 ou 1 Mínima 0 ou 1
Uma mulher pode ser casada no mínimo com quantos homens na outra
entidade? E no máximo?
5.13.
Quando não é possível definir uma chave primária, nem simples e nem
composta, para uma entidade, temos uma entidade fraca. A entidade fraca é
dependente de outra entidade, e o relacionamento entre ela e outra entidade é
normalmente 1:N. Representamos uma entidade fraca, com a linha que liga
seu relacionamento em negrito, como mostra o exemplo na figura 5.14.
EXERCÍCIOS
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
3. Nos diagramas abaixo, para cada entidade defina no mínimo 3 atributos, sua
chave primária e a cardinalidade dos relacionamentos:
4.6. Auto-relacionamento
dizemos que o modelo deve ser generalizado, ou seja, deve passar pelo
processo de generalização.
4.9. Agregação
Atributo Derivado
Atributo Composto
EXERCÍCIOS
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
____________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________
“Uma concessionária que trabalha com venda de veículos deseja criar uma
base de dados para seu negócio. Para qualquer veículo, sabemos o número do
chassi, número da placa, cor, ano de fabricação, quilometragem, código da
marca, nome da marca, código do modelo, e nome do modelo. Todo carro
pertence a um modelo, e este modelo pertence a uma marca. Como a
concessionária vende veículos usados de diferentes marcas, é interessante
haver um cadastro para as marcas e um cadastro para os modelos. Uma
pessoa pode assumir um dos seguintes papeis em relação a concessionária:
corretor ou comprador. Sobre o comprador do veículo, tem-se CPF, nome,
estado civil, e se for casado, os dados do cônjuge(como nome e CPF). Sobre
os corretores, tem-se numero da matricula, nome e data de admissão. Um
corretor negocia com um comprador a venda de um veículo. Sobre a venda,
são necessárias as seguintes informações: data da venda, valor da venda e
valor da comissão do corretor.”
5. Modelo Relacional
Figura 5.2
Figura 5.3
Na barra mostrada pela Figura 5.4, podemos ver vários ícones. Para
criar uma tabela, você deve clicar no ícone “place a new table” e depois clicar
na parte branca situada logo a direita da barra mostrada na Figura 5.4.
Nova tabela
inserida
Figura 5.4
Figura 5.5
Figura 5.6
Para criar um atributo com nome e tipo desejado, você deve clicar duas
vezes em cima da linha onde está o nome do atributo “idtbAluno”. Quando o
cursor ficar como o mostrado na Figura 5.7, você pode digitar o nome do
atributo desejado.
Figura 5.7
Você deve definir os tipos de modo que o seu modelo fique parecido
como o mostrado na Figura 5.8. Note que os tipos dos atributos suportados
variam entre os SGBDs. No caso do MySQL, os principais tipos suportados
são:
Tipo Descrição
VARCHAR Valores no campo VARCHAR são strings de tamanho variável. Você pode declarar um
campo VARCHAR para ter qualquer tamanho entre 1 e 255, assim como para campo
CHAR. No entanto, diferente de CHAR, valores VARCHAR são armazenados usando
apenas quantos caracteres forem necessários, mais 1 byte para gravar o tamanho.
INT Valores inteiros de -2147483648 a 2147483647.
DECIMAL O tipo DECIMAL é usado por valores para os quais é importante preservar a exatidão
como, por exemplo, dados monetários.
DATA O tipo DATA é usado quando se necessita apenas do valor da data, sem a parte da
hora. MySQL recupera e mostra valores do tipo DATA no formato 'ano-mm-dd'
Figura 5.8
Chave Primária
Figura 5.9
Chave Estrangeira
codigo_turma nome_turma
1 1º Informática
2 2º Informática
3 3º Informática
4 1º Enfermagem
Figura 5.10
tbTurma. Para finalizar, você deve informar qual atributo da tabela tbTurma
será utilizada para controlar a integridade da tabela tbAluno. Nesse caso, você
deve marcar o atributo código_turma.
Figura 5.11
EXERCÍCIOS
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
________________________________
Figura 6.1
Figura 6.2
Figura 6.3
Figura 6.4
Figura 6.5
Figura 6.6
Figura 6.7
4. Note que a tabela tbTelefone não possui chave primária. Como você
sabe, todas as tabelas devem ter chaves primárias para garantir a
integridade dos dados. A ausência de chave primária iria permitir que um
mesmo telefone fosse cadastrado mais de uma vez. Para evitar tal
problema, você deve definir os dois atributos da tabela como chave
primária. No caso do exemplo, os atributos Matrícula e Telefone serão
chave primária da tabela tbTelefone. Ao final deste subpasso, você deve
obter algo parecido com a Figura 6.8
Figura 6.8
EXERCÍCIOS
Figura 6.9
Por exemplo, a Figura 6.10 mostra as duas tabelas sem o relacionamento um-
para-um.
Figura 6.10
Figura 6.11
Figura 6.12
Figura 6.13
Figura 6.14
Figura 6.15
Figura 6.16
Figura 6.17
Professor.
a Figura 6.18.
2. inserir como chave estrangeira na tabela recém-criada as chaves
primárias das entidades participantes. No caso do exemplo, você deve
inserir como chave estrangeira os atributos matricula_professor e
código_turma, que são as chaves primárias das tabelas tbProfessor e
tbTurma, respectivamente. Ao final deste subpasso, você deve obter
algo parecido com a Figura abaixo.
Figura 6.18
Figura 6.19
EXERCÍCIOS
Figura 6.20
relacional
7. Dicionário de Dados
8. Normalização de Dados
A tabela abaixo não está na 1FN pois porque o atributo Telefones possui
mais de um telefone por registro (tupla). Por exemplo, a agência 1524 possui
três telefones.
Para adequar uma tabela que não está na 1FN é necessário realizar os
seguintes passos:
Para ilustrar o significado da 2FN, vamos olhar para a Figura xxx. Nesta
figura, a tabela tbAlocação armazena as horas trabalhadas por funcionários
Como você viu anteriormente, para estar na 2FN todos estes três
atributos não chave (endereço_agencia, nome_empregado e
horas_trabalhadas) devem ser obtidos através dos dois atributos chaves
(cod_empregado e numero_agencia). Se for possível obter um atributo não
chave primária através de apenas um dos atributos chave primária, então a
tabela não está na 2FN. É o que acontece com os atributos nome_empregado,
que pode ser obtido apenas de cod_empregado, e um outro exemplo é o caso
do atributo agencia_endereco, que pode ser obtido apenas do atributo
numero_agencia.
Assim a tabela tbAlocação não está na 2FN porque possui pelo menos
um atributo que pode ser obtido de apenas um dos atributos que formam a
chave primária.
O fato de que uma tabela não está na 2FN pode gerar as anomalias
como para modificar o endereço da agência de número 1550 você teria que
modificar dois registros: o segundo e quarto registro, como mostra na tabela.
Para adequar uma tabela que não está na 2FN é necessário fazer os
seguintes passos:
Cod_empregado Nome_empregado
Num_agencia Agencia_endereco 12 Luiz
1524 Prudente de Morais, 12 12 Luiz
1550 Hermes da Fonseca, 15 15 Ricardo
1524 Prudente de Morais, 12 15 Ricardo
1550 Hermes da Fonseca, 15
Para que a tabela obedeça a 3FN, devemos criar uma nova tabela
tbGerente que irá conter o atributo que depende de outro atributo não chave da
tabela original, neste caso nome_gerente, mais o atributo do qual ele depende,
neste caso o código_gerente. A figura abaixo mostra como ficaria este modelo.
EXERCÍCIOS
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
___________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
____________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
_______________________________________________________________
a)
b)
9. CONCEITOS BÁSICOS
Existem vários sites onde você pode baixar o MySQL, mas o ideal é
visitar o site oficial
http://dev.mysql.com/downloads/mysql/
EXERCICIO
1 – Com base no que você já aprendeu sobre banco de dados faça uma
produção textual de no mínimo 5 linhas descrevendo o diagrama abaixo:
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_____________________________________________________________________
_________________________________________________
b) V - F - F – V - V;
c) F - V - V – F - F;
d) V - F - F – F - V;
1º Passo:
2º Passo:
Depois de Aberto o MySQL, ele pede para que você entre com o
password, ou seja, com a senha que você definiu na hora da instalação.
3º Passo:
No meu caso eu já tenho sete bancos de dados criados, como você está
acessando pela primeira vez deve ter pelo menos três que já vem junto da
instalação que é o „information_schema‟, o „mysql‟ e o „test‟ que é geralmente
fornecido como um espaço de trabalho para usuários fazerem testes.
Strings
Tinyblob, Blob,
Mediumblob, Estes tipos de campo armazenam dados no formato binário.
Longblob
Muito cuidado, pois o mysql tem como delimitador o ponto e vírgula (;), ou
seja, se um ponto e vírgula (;) aparecer em meio a um código, o mysql entende que
ali, o comando está encerrado e não há necessidade de continuidade. Muitos erros
acontecem por falta do (ponto e vírgula) no final do comando.
Data/Hora
Numéricos
Decimal Tipo de dados que se comporta como o do tipo CHAR, ou seja, cada
dígito ocupa 1 byte.
1° Passo:
2º Passo:
3º Passo:
Agora como você já tem o banco de dados e entrou nele, você já pode
começar a criar as tabelas do seu banco. Para criar tabelas é preciso seguir um
padrão básico:
Quando for inserido um novo aluno o nome dele vai ser obrigatório.
Pense comigo, na matricula de um novo aluno o seu nome não pode faltar e o
numero da sua matrícula é gerada automaticamente pelo sistema.
Ao ser definida uma coluna como chave primária, estamos dizendo para o
banco de dados que não podem existir duas linhas nessa coluna com um
mesmo valor. Geralmente quando falamos de chave primária usamos a sigla
PK referente à palavra PRIMARY KEY.
4º Passo:
Para ver como ficou a estrutura das tabelas criadas usamos o codigo
DESCRIBE TABLE <nome da tabela>; ou somente DESC TABLE <nome da
tabela>; Mais se você quer ver como foi criada a tabela pode usar o comando
SHOW CREATE TABLE <nome da tabela>
Exemplo DESCRIBE:
Exemplo DESC:
Veja agora como ficou o código criado e compare com o que você fez.
EXERCICIO
1. Com base no exemplo anterior crie um novo banco de dados chamado biblioteca.
1. Adicionar colunas;
2. Excluir colunas;
3. Alterar o tipo e o nome de uma coluna já existente.
Exemplo ADD:
Perceba que a coluna endereço foi adicionada na ultima posição, porém nem
sempre queremos que a coluna que adicionarmos fique por ultimo, por isso Você
pode utilizar palavras chaves como FIRST (primeiro) ou AFTER (após) para
posicionar a nova coluna na posição que desejar na tabela.
Exemplo FIRST:
Exemplo AFTER:
O FIRT insere na primeira coluna, já com o AFTER você escolhe a posição que
deseja que a coluna fique, ou melhor, depois de quem a coluna vai ficar. Usando a
mesma tabela aluno vamos inserir a coluna nascimento depois da coluna nome.
Exemplo DROP:
Como exemplo suponha que a coluna código da tabela aluno não está no
padrão das outras tabelas do banco, porque nas outras tabelas a PK é definida com
o nome “id” e no máximo de 10 caracteres. Então em vez de excluir toda a tabela ou
excluir toda a coluna podemos usar a cláusula CHANGE e renomear o campo.
Exemplo CHANGE:
1. Excluir Tabelas
Para que você possa excluir uma tabela é preciso que ela exista dentro do
banco de dados. Normalmente primeiro usamos o comando SHOW TABLES, para
saber as tabelas que existem dentro do BD. Após usamos o comando
Vamos usar como exemplo o BD escola. Perceba que criamos duas tabelas
uma se chama aluno e a outra novo_aluno, não é preciso que tenhamos essas duas
tabelas em nosso banco então vamos excluir a tabela novo_aluno.
Assim como para excluir tabelas é preciso ver quais existem no BD, para
excluir banco de dados é bom ver quais os bancos de dados existentes dentro do
SGBD, o comando usado é SHOW DATABASES. Mas se você não quer perder
tempo olhando os bancos de dados existentes é só acrescentar IF EXISTS após o
comando DROP DATABASE. Assim:
Vamos usar como exemplo o banco de dados test que veio junto da instalação.
Esse BD é geralmente fornecido como um espaço de trabalho para usuários
fazerem testes como não precisamos dele posso exclui-lo.
Os campos com sublinhado simples são as chaves primárias (PK) que dão uma
identificação única a cada item, e o campo com pontilhado é uma chave estrangeira
através da qual a tabela CLIENTE se relaciona com a tabela PEDIDO.
.
Esse tipo de representação evita que para cada pedido precisemos colocar a
toda a identificação do cliente, basta armazenarmos o id do cliente na tabela de
pedidos e através dele podemos identificar de quem é o pedido. Uma chave
estrangeira sempre se relaciona com a chave primária da tabela do relacionamento.
EXERCICIO
2 - ALTER TABLE CHANGE ( ) Usado para trocar o nome e o tipo de uma coluna
OBS: Os valores devem ser separados com uma vírgula e se o tipo do campo
for texto deve está entre aspas duplas ou simples.
Vamos usar como exemplo a tabela “cliente” que criamos no banco de dados
“venda”, se você não criou essa tabela volte para página antes do exercício onde
estão os códigos da criação. Mas antes de inserir os dados na tabela é bom ver
quais os campos existentes, o comando usado pode ser o DESCRIBE.
Vamos usar como exemplo a mesma tabela que usamos no exemplo anterior
do banco de dados “venda” que é a tabela “cliente”, porém não vai ser preciso
mencionar os nomes dos campos basta repassar valores para todas as colunas.
Vamos inserir o cliente “Pedro” que mora na “Av. Augusto dos Anjos nº 2674”
na cidade de “Fortaleza”. Observe que o primeiro valor que iremos inserir será
zero(0), isso porque a primeira coluna é “cliente_id” que foi declarada como
AUTO_INCREMENT.
CLÁUSULAS
10.7. INSTRUÇÕES DML – SELECT
A forma mais simples de se fazer um SELECT é recuperando todos os dados
de uma tabela. A síntese básica é:
Para que possamos ver os dados dos clientes que inserimos no exemplo
passado, basta usar o comando SELECT * FROM cliente. Se você não tem certeza
que o nome da tabela é essa, use o comando SHOW TABLES e veja as tabelas
existentes dentro do BD.
Exemplo WHERE
Exemplo ORDER BY
SELECT < coluna > FROM < tabela > ORDER BY < coluna >;
OBS: Por padrão o ORDER BY vem como ASC significa que os resultados
serão apresentados por ordem ascendente, ou seja, do menor para o maior.
Mais também pode ser DESC significa que os resultados serão apresentados
por ordem descendente, para isso acontecer você precisa declara-lo.
Como exemplo irei usar uma tabela que criei anteriormente chamada produto:
Perceba que agora usei o DESC na coluna 2 que é preço, então ficou de forma
ascendente, ou seja, do maior para o menor, podemos usar a cláusula ORDER BY
de várias maneiras em situações diferentes, basta saber como usa-lo.
UPDATE < tabela > SET < campo > = “novo valor” WHERE < condição > ;
Como exemplo usaremos a tabela cliente que foi usada nos exemplos
anteriores. Suponhamos que o cliente de nome Francisco se mudou, então
precisamos atualizar o seu registro colocando o seu novo endereço.
UPDATE < tabela > SET < campo1 > = “valor1”, < campo2 > = “valor2”
WHERE < condição > ;
OBS: Devemos passar sempre o WHERE, que é uma espécie de filtro em nossa
tabela, porque senão o passarmos atualizaremos TODOS os dados da tabela e isso
pode acarretar diversos problemas, dependendo do tamanho e da complexidade da
sua tabela. Imagina se esquecermos de colocar uma condição em uma tabela de
1.000 registros e alterarmos todos os endereços dos clientes para um só.
DELETE FROM < nome da tabela > WHERE < condição >;
OBS: Lembre-se que este comando, assim como o UPDATE, pode ser
perigoso em algumas situações, já que, uma vez executado esses
comandos, não será possível desfazer a ação realizada. Portanto, devemos
ficar atentos ao usar esses comandos em tabelas complexas.
Como exemplo vamos usar a mesma tabela que usamos nos comandos
INSERT, SELECT e UPDATE, que é a tabela cliente do banco de dados venda.
Suponhamos que o Francisco não é mais o nosso cliente, então devemos exclui-lo
da nossa tabela, para isso usamos o comando DELETE.
FUNÇÕES DE AGREGAÇÃO
Agora se queremos saber somente os totais dos clientes que vão pagar
um valor que seja maior que 200,00 R$ precisamos passar uma condição para
o select utilizando a cláusula HAVING.
OPERADORES RELACIONAIS
<> Diferente
= Igual a
OPERADORES LÓGICOS
Exemplo LIKE
COMANDO DESCRIÇÃO
SELECT * FROM contatos WHERE nome LIKE ' < condição > ' ;
Utilizando AND / OR
O operador AND exibe os registros se tanto a primeira condição como a segunda
condição for verdadeira. O operador OR exibe os registros se a primeira condição ou a
segunda for verdadeira. Esses operadores são usados para filtrar registros com base
em mais de uma condição.
Exemplo BETWEEN
Este comando irá selecionar todas as linhas cuja coluna tiver um valor entre 10
e 20. Os valores podem ser números, texto ou datas. Poderíamos de outra forma
obter o mesmo resultado que seria:
SELECT * FROM alunos WHERE idade > = 10 AND idade < = 20;
EXERCICIO
10. Liste a quantidade de alunos com idade entre 10 e 20 anos que sejam do sexo
masculino.
13. Liste os nomes dos alunos que começam com a letra „A‟ e de sexo masculino.
INTRODUÇÃO
O Objetivo geral desse módulo é fazer com que estudantes de Java possam
aprender a fazer conexão com banco de dados e realizar as principais
funcionalidades (cadastrar, consultar, excluir e alterar). Espero que com o término
desse módulo você possa ter aprendido o bastante para poder desenvolver seus
próprios sistemas e saber interagir a sua aplicação com qualquer banco de dados.
Como serão muitas informações não vou me prender em detalhes, como já foi
dito o objetivo principal é ensinar a manipular dados do banco, então caso fale
pouco sobre algum assunto é porque esse não é o foco. Então se você tiver alguma
dúvida procure ajuda em outras e peça a Judá ao seu professor, pois poderá
precisar desse conhecimento mais na frente.
Por exemplo, a tabela Filme possui relacionamento com outras três tabelas
(Categoria, Classificação e dvd), onde as chaves primarias(PK) das tabelas
Categoria e Classificação são chaves estrangeiras(FK) na tabela Filme, e a chave
primaria(PK) da tabela Filme é chave estrangeira(FK) na tabela dvd e assim por
diante acontece com as outras tabelas.
CRIAÇÃO DO PROJETO
Pacote DAO
Pacote Imagens
Todas as imagens do nosso projeto se encontram dentro desse pacote,
tudo isso para nível de organização.
Pacote Locacao
Esse pacote faz parte da interface com usuário(JFrame), porém ele foi
separado do pacote Visão por motivo de um melhor controle das suas classes.
Pacote Modelo
Pacote Principal
Nesse pacote temos a classe que possui o método Main, essa classe é
responsável por chamar a tela de Login que por sua vez é responsável por
chamar a tela do Menu.
Pacotes de Visao
Visao.Alterar Visao.Cadastrar
Visao.Consultar Visao.Excluir
Tela de Login
Menu Principal
Cadastro de Funcionário
Cadastro de Cliente
Cadastro de Categoria
Cadastro de Classificação
Cadastro de Filme
Cadastro de DVD
Cadastro de Locação
Consulta de Locação
Consulta de Cliente
Consulta de Filme
Consulta de DVD
Alterar e Excluir
Definição do Driver
jdbc:mysql://localhost/locadora
A classe de Conexão
Linha 3: importa as classes do pacote sql necessárias para conexão com banco
de dados.
Linha 10: o tratamento de exceções em Java se dá através dos blocos try, catch.
Tudo que estiver dentro do bloco try será executado até que alguma exceção seja
lançada, ou seja, até que algo dê errado.
Linha 11: carrega o driver que será usado pela aplicação Java para realizar a
comunicação com o banco de dados.
Linha 12: declara a url necessária para conexão passando o nome do banco de
dados que iremos usar.
Linha 13: estabelece uma conexão por meio do objeto con usando a String url e
passando o login e a senha que foram definidas no momento da instalação do
Mysql.
Linha 15: caso a conexão não possa ser realizada por qualquer motivo ocorre a
exceção onde passa a executar o bloco catch.
Linha 16, 17: envia uma mensagem ao usuário informando que houve erro na
conexão com o banco de dados.
Linha 20: retorna o objeto con, se tudo ocorrer bem o objeto con recebeu a
conexão na linha 13.
A estrutura do DAO
Cliente – o cliente é um objeto que requer acesso à fonte de dados para obter
e armazenar dados.
DAO – o DAO abstrai a implementação de acesso a dados para o cliente a fim
de permitir um acesso transparente a fonte dedados.
BaseDeDado – representa uma implementação de fonte de dados.
ResultSet – representa os resultados de uma execução de consulta.
TipoDeDado – representa um objeto de transferência usado como um
carregador de dados.
A superclasse ExecuteSQL.java
Linha 7: declara o objeto con da classe Connection como private, ou seja, não
pode ser acessado diretamente por outras classes.
Linha 13, 17: cria os métodos getCon e setCon, para acessar o objeto con
definido como private na linha 7, os métodos são public, ou seja, são vistos por
qualquer outra classe do projeto.
Linha 8: importa a classe Funcionário do pacote Modelo necessária para o uso dos
métodos getters e setters.
Linha 15: cria o método Logar() do tipo boolean, ou seja, irar retornar true ou
false. O método recebe dois valores por parâmetro que será os valores de login e
senha digitada pelo usuário no momento de entrar no sistema.
Linha 16: cria a variável finalResult do tipo boolean recebendo como valor false.
Linha 18, 19: cria o script de comandos em SQL que será usado na consulta ao
banco de dados e o armazena na String consulta. O comando manda
basicamente selecionar o login e a senha da tabela funcionário onde login e
senha forem iguais aos valores das variáveis passadas para o método.
Linha 28: se tudo ocorrer bem a variável booleana finalResult passará a receber
um novo valor, ou seja, de false ela passa a ser true, isso servirá para quando
formos usar esse método na ação do botão entrar.
Linha 152, 153: cria as variáveis login e senha do tipo String para receber os
valores digitado pelo usuário nos campos tfUsuario e tfsenha, os nomes dos
campos foram dados seguindo o padrão textfield = tf + nome.
Linha 160: verifica se o retorno do método Logar() é igual a true, ou seja, nesse
momento pelo objeto sql é chamado o método Logar() passando as variáveis login
e senha definidas nas linhas(152 e 153) e no mesmo instante já verifica o retorno
do método.
Linha 162: a tarefa a ser executado pelo thread deverá ser descrita pelo método
run(). Ou seja, toda tarefa de carregar a barra de progresso e abrir a tela do menu
principal após o carregamento, se encontra dentro desse método.
Linha 166: define a velocidade que será cheia a barra de progresso, através do
método sleep() da classe Thread.
Linha 174: após definido a ação que será realizada pela Thead dentro do método
run() é chamado o método start(), ou seja, é nesse momento que o que foi definido
será executado.
A classe Main.java
BARRA DE MENUS
Foi criada uma barra de menus com as respectivas ações que serão realizadas
(Cadastrar, Consultar, Alterar, Excluir) todas possuem os mesmos itens
(Cliente, Filme, DVD, Categoria, Classificação, Funcionário), então a única ação é
chamar as telas de cada um dos itens.
Barra de Menu
INSERINDO MÁSCARAS
CADASTRO DE CLIENTE
Linha 27: cria o script de comandos em SQL que será usado na consulta ao
banco de dados e o armazena na String sql. Um ponto a observar é o uso do
caractere de interrogação(?), que será substituído por parâmetros durante a
execução do método.
Linha 31 – 40: cada um dos parâmetros usado no script em SQL deve ser
passado ao objeto ps por meio de métodos apropriados. Existem diversos
métodos que podem ser usados, dependendo do tipo de valor, por exemplo:
setString, setInt, setDouble etc. na linha 31 usamos os parâmetros 1(referente a
primeira interrogação da linha 27) e a.getNome(referente ao conteúdo que será
colocado no lugar do caractere de interrogação).
Linha 430 – 439: guarda nas variáveis do tipo String os dados digitado pelo
usuário nas TextFields, o método usado para pegar o que foi digitado é getText();
Linha 440 – 444: verifica se nenhuma das variáveis estão vazias através do
método equals(“ ”), se alguma estiver vazia é lançada uma mensagem informando
que nenhum campo pode estar vazio.
Linha 451 – 460: através do objeto “a” da classe Cliente.java é enviado para o
método set as variáveis que armazenaram os dados digitados pelo usuário.
USANDO ARRAYLIST
O Java, por padrão, possui uma série de recursos prontos (APIs) para que
possamos tratar de estrutura de dados, também chamados de coleções (collections).
Podemos dizer que ArrayList é uma classe para coleções. Uma classe genérica para
ser mais exato. Coleções de qualquer tipo de dados e não somente de tipos
primitivos.
Você pode criar seus objetos através de uma classe e agrupá-los através de
ArrayList e realizar, nessa coleção, várias operações, como: adicionar e retirar
elementos, ordená-los, procurar por um elemento específico, apagar um elemento
específico, limpar o ArrayList dentre outras possibilidades.
Nós vamos precisar usar o ArrayList para agrupar os dados vindos do banco,
para realizar os comandos INSERT, UPDATE ou DELETE não é preciso usar um
CONSULTA DE CLIENTE
Linha 71: enquanto existirem registros no objeto rs(linha 62) o objeto “a” da
classe Cliente será adicionado a lista através do método add(), esse método é
usado para adicionar um elemento ao ArrayList.
Linha 73: se o objeto “rs” for diferente de null (linha 61) então o método retornará
a lista com os registros adicionados(linha 71) e devidamente agrupados.
Criação do Método AtualizaTable().
Linha 45: define o titulo que aparecerá no JFrame através do método setTitle().
Método AtualizaTable()
Linha 329, 330: cria um objeto de nome “tbm” do tipo DefaultTableModel para
trabalhar com um modelo que possa inserir deletar ou atualizar os dados de uma
tabela, que em nosso caso a tabela se chama “jTable”, por isso que usamos o
método getModel() (linha 330) para poder manipular a tabela jTable.
Linha 331 – 333: cria a estrutura de repetição while para apagar os dados da
tabela antes de inserir novos, o método getRowCount() retorna a quantidade total
de linhas, então se a quantidade de linhas for maior que 0 ele entra na estrutura e
usa o método RemoveRow() passando o valor 0 para apagar a tabela.
Linha 337 – 342: é usado o método setValueAt() para inserir os dados na tabela
passando o valor através do objeto “tab” da classe Cliente que chama o método
get() se referindo ao valor que será inserido na linha dinamicamente e na referida
coluna. Então o método setValueAt() recebe o valor, a linha e a coluna.
Exemplo
Linha 83, 84: a única coisa que muda em relação ao método ListarCliente() é a
String sql que agora tem uma condição de seleciona pelo nome. Por isso
acredito que não seja necessário colocar todo o método, basta você como um
bom programar com base no método ListarCliente() fazer o restante do método.
ALTERAÇÃO DE CLIENTE
Esse método serve para verificar se existe algum cliente com o idcliente igual
ao valor digitado pelo usuário, se o objeto “rs” for diferente de nulo(linha 295)
então a variável “resultado” passará a receber true como valor(linha 297). Esse
método é parecido com o método que criamos Testar_Funcionário() que
verificava se existe funcionário cadastrado com aquele login e senha.
Linha 307 – 309: cria o comando update, para alterar os dados do cliente. O
objetivo desse modulo não é explicar comandos sql, tendo em vista que todos
que estão estudando conexão com banco de dados em Java, já passaram pelo
modulo de banco de dados, mas se você tem duvida sobre comandos sql, não
somente copie o comando mais entenda o que ele faz, esse é um principio que
todo programador deve ter.
Método InserirDados()
Esse método recebe por parâmetro a variavel “cod” do tipo inteiro e envia
para o método CapturarCliente() guardando em um ArrayList o retorno do
método(linha 654). A criação desse método é feita dentro da tela de alterar
cliente, ele será chamado no momento do click do botão ok.
Acredito que não seja necessário comentar linha por linha sendo que os
mesmos códigos já foram usados e comentados em exemplos anteriores, se você
não sabe o que está acontecendo em alguma linha de código procure em
exemplos saber o que esse comando faz. Basicamente esse comando é
responsável por preencher os campos com informações do cliente que pertence o
código digitado.
Ação do Botão OK
Ação do botão OK
Linha 478 – 788: guarda nas variáveis do tipo String os dados dos TextFields
através do método getText().
Linha 495, 496: converte para o tipo int as variáveis que recebem o código e o
numero, porque na criação da tabela os campos recebem do tipo inteiro.
Linha 499 – 509: envia para os métodos set da classe Cliente.java através do
objeto da classe(linha 497) as variáveis que receberam os dados atualizados.
Exemplo
EXCLUSÃO DE CLIENTE
Esse método é responsável por pegar os nomes dos clientes para listar
dentro da combobox. Perceba que usamos a clausula “order by nome” (linha 164)
para listar os nomes dos clientes em ordem alfabética.
Método AtualizaCombo()
Linha 268: para adicionar itens na combobox usamos o método addItem(), para
que o primeiro cliente da lista não apareça no momento de carregar a tela,
adicionamos uma String vazia antes de adicionar os nomes.
Linha 272: nesse momento são listados dentro da combobox os nomes dos
clientes em ordem alfabética. É preciso ter cuidado para não se esquecer de
chamar o método AtualizaCombo() dentro do método initComponents() para que
assim que abrir o Jframe os nomes seja adicionados na combobox.
Exemplo
Linha 282: para pegar o valor digitado em uma TextField usamos o método
getText(), mas para pegar o valor selecionado na combobox é preciso usar o
método getSelectedItem().toString().
Linha 238: cria o comando sql para deletar o cliente que possui o idcliente e o
nome de acordo com os valores passados(linhas 242 e 243).
Linha 244: verifica se o método executeUpdate() é maio que zero, isso para saber
se alguma linhas da tabela foi afetadas, se for maior que zero retorna uma String
informando excluído com sucesso.
Exemplo
CADASTRO DE FILME
Linha 480: define através do método setDialogTitle() qual será o titulo que
aparecerá na caixa de seleção.
Linha 482, 483: guarda na variável “a” o nome do arquivo selecionado através do
método getSelectedFile.getName() e mostra no tfCapa (linha 483)
Linha 484, 485: usa o método setIcon do lbcapa para mostrar a imagem, de
forma que especifica o caminho do arquivo. Mais além de especificar o caminho
do arquivo é preciso dizer o nome dele, podemos saber o nome do arquivo
através do tfcapa (linha 483), então basta usar o método getText().
Exemplo
CADASTRO DE LOCAÇÃO
Ação do botão OK
Método AtualizaDate()
Exemplo
Espero que você esteja entendendo a lógica usada, porque em uma locadora
podemos ter vários DVDs de um mesmo filme, então na verdade é alugado o DVD e
não o filme, por isso foi dividido o cadastro de filme e o cadastro de DVD, e
consequentemente tivemos que criar esses métodos.
Método InserirDados()
Exemplo
REALIZAR DEVOLUÇÃO
Exemplo
Exemplo de devolução
CONCLUSÃO
Agora nada impede com que você evolua o sistema realizando mais
funcionalidades como, por exemplo, fazer reservas de DVD, calcular multas por
atraso, melhorar a forma de devolução, mostrar o valor que o cliente está
devendo não deixando alocar novos DVD antes de pagar a divida, etc.
Terra adorada,
Entre outras mil,
És tu, Brasil,
Ó Pátria amada!
Dos filhos deste solo és mãe gentil,
Pátria amada, Brasil!