Escolar Documentos
Profissional Documentos
Cultura Documentos
Marcelo
Marcelo
Palhoa
UnisulVirtual
2006
Banco de Dados II
Disciplina na modalidade a distncia
Banco_dadosII-fechado.indb 1 18/6/2007 13:59:14
Crditos
Unisul - Universidade do Sul de Santa Catarina
UnisulVirtual - Educao Superior a Distncia
Campus UnisulVirtual
Avenida dos Lagos, 41
Cidade Universitria Pedra Branca
Palhoa SC - 88137-100
Fone/fax: (48) 3279-1242 e
3279-1271
E-mail: cursovirtual@unisul.br
Site: www.virtual.unisul.br
Reitor Unisul
Gerson Luiz Joner da Silveira
Vice-Reitor e Pr-Reitor
Acadmico
Sebastio Salsio Heerdt
Chefe de Gabinete da Reitoria
Fabian Martins de Castro
Pr-Reitor Administrativo
Marcus Vincius Antoles da Silva
Ferreira
Campus Sul
Diretor: Valter Alves Schmitz Neto
Diretora adjunta: Alexandra
Orsoni
Campus Norte
Diretor: Ailton Nazareno Soares
Diretora adjunta: Cibele Schuelter
Campus UnisulVirtual
Diretor: Joo Vianney
Diretora adjunta: Jucimara
Roesler
Equipe UnisulVirtual
Administrao
Renato Andr Luz
Valmir Vencio Incio
Avaliao Institucional
Dnia Falco de Bittencourt
Biblioteca
Soraya Arruda Waltrick
Capacitao e Apoio
Pedaggico Tutoria
Angelita Maral Flores
(Coordenadora)
Caroline Batista
Enzo de Oliveira Moreira
Patrcia Meneghel
Vanessa Francine Corra
Coordenao dos Cursos
Adriano Srgio da Cunha
Alosio Jos Rodrigues
Ana Luisa Mlbert
Ana Paula Reusing Pacheco
Charles Cesconetto
Diva Marlia Flemming
Fabiano Ceretta
Itamar Pedro Bevilaqua
Janete Elza Felisbino
Jucimara Roesler
Lauro Jos Ballock
Lvia da Cruz (Auxiliar)
Luiz Guilherme Buchmann
Figueiredo
Luiz Otvio Botelho Lento
Marcelo Cavalcanti
Maria da Graa Poyer
Maria de Ftima Martins
(Auxiliar)
Mauro Faccioni Filho
Michelle D. Durieux Lopes Destri
Moacir Fogaa
Moacir Heerdt
Nlio Herzmann
Onei Tadeu Dutra
Patrcia Alberton
Raulino Jac Brning
Rodrigo Nunes Lunardelli
Simone Andra de Castilho
(Auxiliar)
Criao e Reconhecimento de
Cursos
Diane Dal Mago
Vanderlei Brasil
Desenho Educacional
Design Instrucional
Daniela Erani Monteiro Will
(Coordenadora)
Carmen Maria Cipriani Pandini
Carolina Hoeller da Silva Boeing
Flvia Lumi Matuzawa
Karla Leonora Dahse Nunes
Leandro Kingeski Pacheco
Ligia Maria Soufen Tumolo
Mrcia Loch
Viviane Bastos
Viviani Poyer
Acessibilidade
Vanessa de Andrade Manoel
Avaliao da Aprendizagem
Mrcia Loch (Coordenadora)
Cristina Klipp de Oliveira
Silvana Denise Guimares
Design Grco
Cristiano Neri Gonalves Ribeiro
(Coordenador)
Adriana Ferreira dos Santos
Alex Sandro Xavier
Evandro Guedes Machado
Fernando Roberto Dias
Zimmermann
Higor Ghisi Luciano
Pedro Paulo Alves Teixeira
Rafael Pessi
Vilson Martins Filho
Disciplinas a Distncia
Tade-Ane de Amorim
Ctia Melissa Rodrigues
Gerncia Acadmica
Patrcia Alberton
Gerncia de Ensino
Ana Paula Reusing Pacheco
Logstica de Encontros
Presenciais
Mrcia Luz de Oliveira
(Coordenadora)
Aracelli Araldi
Graciele Marins Lindenmayr
Letcia Cristina Barbosa
Knia Alexandra Costa Hermann
Priscila Santos Alves
Formatura e Eventos
Jackson Schuelter Wiggers
Logstica de Materiais
Jeferson Cassiano Almeida da
Costa (Coordenador)
Jos Carlos Teixeira
Eduardo Kraus
Monitoria e Suporte
Rafael da Cunha Lara
(coordenador)
Adriana Silveira
Andria Drewes
Caroline Mendona
Cristiano Dalazen
Dyego Rachadel
Edison Rodrigo Valim
Francielle Arruda
Gabriela Malinverni Barbieri
Jonatas Collao de Souza
Josiane Conceio Leal
Maria Eugnia Ferreira Celeghin
Rachel Lopes C. Pinto
Vincius Maykot Seram
Produo Industrial e Suporte
Arthur Emmanuel F. Silveira
(coordenador)
Francisco Asp
Relacionamento com o
Mercado
Walter Flix Cardoso Jnior
Secretaria de Ensino a
Distncia
Karine Augusta Zanoni
Albuquerque
(Secretria de ensino)
Ana Paula Pereira
Andra Luci Mandira
Carla Cristina Sbardella
Deise Marcelo Antunes
Djeime Sammer Bortolotti
Franciele da Silva Bruchado
Grasiela Martins
James Marcel Silva Ribeiro
Jennier Camargo
Lamuni Souza
Lauana de Lima Bezerra
Liana Pamplona
Marcelo Jos Soares
Marcos Alcides Medeiros Junior
Maria Isabel Aragon
Olavo Lajs
Priscilla Geovana Pagani
Rosngela Mara Siegel
Silvana Henrique Silva
Vanilda Liordina Heerdt
Vilmar Isaurino Vidal
Secretria Executiva
Viviane Schalata Martins
Tecnologia
Osmar de Oliveira Braz Jnior
(Coordenador)
Jeerson Amorin Oliveira
Ricardo Alexandre Bianchini
Banco_dadosII-fechado.indb 2 18/6/2007 13:59:34
Apresentao
Este livro didtico corresponde disciplina Banco de Dados II.
O material foi elaborado visando a uma aprendizagem autnoma,
abordando contedos especialmente selecionados e adotando uma
linguagem que facilite seu estudo a distncia.
Por falar em distncia, isso no signica que voc estar sozinho.
No esquea que sua caminhada nesta disciplina ser acompanhada
constantemente pelo Sistema Tutorial da UnisulVirtual. Entre em
contato sempre que sentir necessidade, seja por correio postal, fax,
telefone, e-mail ou Espao UnisulVirtual de Aprendizagem. Nossa
equipe ter o maior prazer em atend-lo, pois sua aprendizagem
nosso principal objetivo.
Bom estudo e sucesso!
Equipe UnisulVirtual.
Banco_dadosII-fechado.indb 3 18/6/2007 13:59:35
Banco_dadosII-fechado.indb 4 18/6/2007 13:59:35
Marcelo Medeiros
Palhoa
UnisulVirtual
2006
Banco de Dados II
Livro didtico
Design instrucional
Flavia Lumi Matuzawa
Banco_dadosII-fechado.indb 5 18/6/2007 13:59:35
Copyright UnisulVirtual 2006
Nenhuma parte desta publicao pode ser reproduzida por qualquer meio sem a prvia autorizao desta instituio.
Edio --- Livro Didtico
Professor Conteudista
Marcelo Medeiros
Design Instrucional
Flavia Lumi Matuzawa
ISBN 8560694-15-3
ISBN 978-85-60694-15-0
Projeto Grfico e Capa
Equipe UnisulVirtual
Diagramao
Rafael Pessi
Reviso Ortogrfica
B2B
005.75
M43 Medeiros, Marcelo
Banco de dados II : livro didtico / Marcelo Medeiros ; design
Instrucional Flavia Lumi Matuzawa, Viviane Bastos. Palhoa :
UnisulVirtual, 2006.
238 p. : il. ; 28 cm.
Inclui bibliografia.
ISBN 8560694-15-3
ISBN 978-85-60694-15-0
1. Banco de dados. 2. Banco de dados orientado a objetos. 3. Banco de
dados relacionais. I. Matuzawa, Flavia Lumi. II. Bastos, Viviane. III. Ttulo.
Ficha catalogrfica elaborada pela Biblioteca Universitria da Unisul
Apresentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 03
Palavras do professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE 1 Sistema computacional como soluo do problema . . . . . . . . . . . . 15
UNIDADE 2 Preparando o ambiente de banco de dados . . . . . . . . . . . . . . . . . . . . 43
UNIDADE 3 Ambiente de programao Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
UNIDADE 4 Linguagem de defnio de dados - DDL . . . . . . . . . . . . . . . . . . . . . . . 91
UNIDADE 5 Ambiente de desenvolvimento integrado . . . . . . . . . . . . . . . . . . . . . 107
UNIDADE 6 Comandos em Java para conexo com banco de dados . . . . . . . 127
UNIDADE 7 Comandos em Java para Apresentao dos Dados . . . . . . . . . . . . 157
UNIDADE 8 Criando a aplicao de cadastro de alunos . . . . . . . . . . . . . . . . . . . . 177
UNIDADE 9 Criando as consultas para a Tabela de Alunos . . . . . . . . . . . . . . . . . . 209
Para concluir o estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Sobre o professor conteudista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Respostas e comentrios das atividades de auto-avaliao . . . . . . . . . . . . . . . . . . . . 231
Sumrio
Banco_dadosII-fechado.indb 7 18/6/2007 13:59:35
Banco_dadosII-fechado.indb 8 18/6/2007 13:59:35
Palavras do professor
Ol, voc esta iniciando o estudo da disciplina de Banco de Dados II.
Se voc parar um pouco para avaliar o seu dia-a-dia, voc notar
que convive com um mundo de informaes, que so usadas nas
suas atividades dirias, por mais simples que sejam.
Nesta disciplina voc conhecer sobre as formas de
armazenamento e acesso aos dados gravados no computador e
sobre as tcnicas existentes que possibilitaro a voc integrar um
sistema de banco de dados e uma linguagem de programao, ou
de forma resumida, criar um sistema computacional com acesso a
banco de dados.
Esta disciplina possibilitar que voc entenda melhor as regras de
implementao que permitem que um sistema de banco de dados
seja acessado e manipulado por um programa desenvolvido em
uma linguagem de programao de alto nvel, neste caso o Java.
Assim, espero que voc possa aproveitar ao mximo o contedo
desta disciplina.
Bom estudo!
Prof. Marcelo Medeiros
Banco_dadosII-fechado.indb 9 18/6/2007 13:59:35
Banco_dadosII-fechado.indb 10 18/6/2007 13:59:36
Plano de estudo
O plano de estudos visa a orient-lo/a no desenvolvimento da
Disciplina. Nele, voc encontrar elementos que esclarecero
o contexto da Disciplina e sugeriro formas de organizar o seu
tempo de estudos.
O processo de ensino e aprendizagem na UnisulVirtual leva
em conta instrumentos que se articulam e se complementam.
Assim, a construo de competncias se d sobre a articulao
de metodologias e por meio das diversas formas de ao/
mediao.
So elementos desse processo:
o livro didtico;
o Espao UnisulVirtual de Aprendizagem - EVA;
as atividades de avaliao (complementares, a distncia
e presenciais);
o Sistema Tutorial.
Ementa
Fundamentao terica do modelo relacional: restries de
integridade bsica, integridade semntica. Mapeamento do
modelo conceitual para o modelo relacional. Linguagem de
consulta estruturada (SQL). Normalizao. Banco de dados
aplicados em sistemas web. Anlise, projeto e implementao
de banco de exemplos reais.
Sees de estudo
Seo 1 Analisando o problema.
Seo 2 Apresentando o problema.
Seo 3 Criando os relacionamentos entre os dados.
Seo 4 Modelo de dados do sistema.
Seo 5 Criao do script SQL.
Banco_dadosII-fechado.indb 15 18/6/2007 13:59:36
16
Universidade do Sul de Santa Catarina
Para incio de conversa
Uma das grandes contribuies da informtica para a sociedade
atual a generalizao das qualidades prossionais de cada
indivduo. Em outras palavras signica dizer que o famoso
jeitinho brasileiro est se transformando em um atributo muito
desejado nos prossionais atuais, independente da sua rea de
atuao.
Essa generalizao permite que as pessoas realizem trabalhos de
outros prossionais de uma maneira aceitvel, com qualidade, a
partir da sua capacidade de adquirir novas aptides.
Se voc voltar um pouco no tempo, poder se recordar de
algumas prosses que eram essenciais ao dia-a-dia de uma
grande empresa. As empresas careciam, por exemplo, de uma
exmia secretria, com grandes qualidades de datilgrafa,
qualidade essa, decisiva na sua contratao.
Um outro exemplo seria o arquivista responsvel por coordenar
todos os processos de armazenamento de documentos
importantes da empresa, catalogando-os e colocando-os em
ordem naqueles enormes chrios, alguns deles, at mesmo,
com segredos, como se fossem cofres com um grande tesouro
guardado a sete chaves.
Eu poderia citar aqui vrias outras prosses que foram
evoluindo, fundindo-se a outras que surgiram nos tempos atuais,
principalmente em um pas em desenvolvimento como o nosso,
no qual qualidades prossionais agregadas podem fazer muita
diferena na hora da contratao de um prossional. Alm de
signicar uma economia ao contratante.
H os que questionam essa transformao, avaliando-a como
uma forma de excluso social, justicando que aqueles que
possuem capacidade e condies nanceiras para se adequar
s mais diversas habilidades prossionais tm maior chance de
sucesso prossional no mundo globalizado.
Banco_dadosII-fechado.indb 16 18/6/2007 13:59:36
17
Banco de Dados II
Unidade 1
Eu considero essa transformao como uma evoluo e uma
necessidade.
Na rea de desenvolvimento de softwares essa mesma
transformao vem ocorrendo. As habilidades de um prossional
envolvido com anlise, armazenamento e implementao de
sistemas e banco de dados vm se fundindo para um prossional
que abrace as trs tecnologias.
O prossional de desenvolvimento de softwares precisa ter a
habilidade para identicar as reais necessidades dos seus clientes
e a capacidade tcnica para transformar tudo isso em uma soluo
computacional.
Que vale salientar, no tarefa das mais fceis.
Agregue a isso a necessidade de garantir que os dados
armazenados pelo sistema representem elmente a realidade do
dia-a-dia de seus usurios, com integridade e facilidade de acesso.
Essa capacidade de se adaptar s mais diversas necessidades
alcanada a partir da experincia prossional adquirida no dia-
a-dia, adicionada de uma dose de boa vontade e estudo, muito
estudo, anal, essa rea requer uma constante reciclagem.
Dessa forma, nesta unidade voc convidando a um contato
com a rea da computao que envolve anlise, implementao
e armazenamento de dados, de forma prtica, fazendo com que
voc tenha uma viso mais aprofundada do papel do prossional
de banco de dados como gerador de solues computacionais, e
mais do que isso, que voc seja pea fundamental no processo
de criao de um sistema computacional com acesso a banco de
dados.
Portanto, mais do que nunca, mos obra!
Banco_dadosII-fechado.indb 17 18/6/2007 13:59:36
18
Universidade do Sul de Santa Catarina
SEO 1 Analisando o problema
Se voc zer uma busca em alguns dicionrios da lngua
portuguesa pela palavra problema, encontrar algo como:
Problema: questo que se prope para ser resolvida;
algo difcil de explicar; dvida; questo; mistrio;
enigma.
At a, acredito que no seja nenhuma novidade essa denio de
problema, certo? Porm, qual a relao entre a palavra problema
e as tarefas executadas por um prossional de informtica,
em especial aqueles que possuem como principal objetivo a
implementao de softwares?
Pois bem, o prossional de informtica envolvido com o
desenvolvimento de sistemas computacionais, ou simplesmente
softwares, precisa realizar uma tarefa muito complexa, que
compreender as necessidades do cliente a partir do problema
apresentado. Esse prossional responsvel pelo desenvolvimento
e manuteno de sistemas de informao para qualquer tipo de
organizao, seja ela pblica ou privada, de grande porte ou no.
A anlise detalhada do problema fundamental para se levantar
os requisitos necessrios para que o software a ser implementado
atenda realmente as necessidades dos seus usurios, ou, em outras
palavras, solucione os seus problemas.
A anlise do problema tem como principais nalidades:
o levantamento de requisitos;
a modelagem e especicao das funcionalidades e
delimitaes do sistema;
a denio dos mdulos do sistema.
A partir da anlise das necessidades do cliente possvel:
denir em qual plataforma (sistema operacional,
ferramenta de banco de dados e linguagem de
programao) o sistema ser desenvolvido;
Sees de estudo
Seo 1 Conceitos fundamentais de programao em Java.
Seo 2 Conexo ao banco de dados em Java.
Seo 3 Comandos de manipulao de dados em Java.
Banco_dadosII-fechado.indb 127 18/6/2007 13:59:49
128
Universidade do Sul de Santa Catarina
Para incio de conversa
Amigo de banco de dados,
Agora chegou a hora de voc pr a mo na massa, no h mais
como fugir da parte boa da construo de uma aplicao com
conexo a banco de dados. Chegou o momento de voc comear
a implementar algumas regras de negcio da aplicao que
solucionar o problema da escola Sabe Tudo.
Voc j est com o circo armado, ento hora do show.
Acredito que voc j tenha tido contato com a linguagem de
programao Java, mas mesmo assim, alguns comandos e
conceitos sero revisados, o mais importante que voc poder
interagir como novos comandos de conexo ao banco e de
manipulao de dados.
Mais do que isso, voc ir implementar essas funcionalidades
usando a metodologia da programao orientada a objetos e
poder relembrar alguns conceitos importantes dessa metodologia
e, principalmente, coloc-los em prtica.
Portanto, chega de papo, chegou a hora da codicao.
SEO 1 Conceitos fundamentais de programao
em Java
Voc j teve o contato com a programao em Java por meio
da disciplina de Programao Orientada a Objetos, porm
necessria uma reviso de alguns conceitos importantes para o
que vem pela frente.
fundamental que voc sempre se lembre que o processo de
programar independe da linguagem utilizada, sendo que o mais
importante uma lgica de programao bem estruturada e
organizada.
Basicamente, programar abrange as seguintes etapas: analisar,
codicar, compilar, depurar e executar.
Banco_dadosII-fechado.indb 128 18/6/2007 13:59:50
129
Banco de Dados II
Unidade 6
Mas o que cada uma dessas etapas?
Para responder essa pergunta veja a tabela a seguir.
Quadro 6.1 - ETAPAS DA PRAGRAMAO
Etapa Funo
Analisar Converter a soluo em um algoritmo.
Codicar Escrever a soluo lgica por meio de uma linguagem de programao.
Compilar
Vericar se o cdigo fonte atende as regras de semntica e sintaxe da
linguagem utilizada.
Depurar
Corrigir os erros de sintaxe e semntica apresentados pelo processo de
compilao.
Executar Fazer o programa rodar.
Por meio de um diagrama, o processo pode ser representado da
seguinte forma:
Grfco 6.1 - ETAPAS DO PROCESSO DE PROGRAMAO
Codificao
Compilao
Erros de
sintaxe / semntica
Executar
NO
SIM
Depurar
Banco_dadosII-fechado.indb 129 18/6/2007 13:59:50
130
Universidade do Sul de Santa Catarina
Com base nessas etapas, voc estudar o processo de codicao,
que est diretamente relacionado com a linguagem de
programao Java e sua estrutura de programao, sintaxe e
semntica.
O Java uma linguagem de programao totalmente orientada a
objeto, sendo assim, cada programa implementado em Java visto
como uma classe, ou seja, as regras de manipulao de um objeto.
O escopo de um programa em Java :
class nome_da_classe {
Atributos - privados;
Mtodo Construtor com o mesmo nome da classe e pblico;
Mtodos Modicadores pblicos;
Mtodos Recuperadores pblicos;
Mtodos das Regras de Negcio da Classe pblicos ou privados;
Mtodo Main nas classes em que h um mtodo principal.
}
Acredito que esse escopo j seja de seu conhecimento.
Veja o exemplo a seguir:
import javax.swing.*;
class caneta{
private String Modelo,Marca,CorTinta;
private oat Preco;
//-- Construtor
public caneta(){
setModelo();
setMarca();
setPreco(0);
setCorTinta();
}
//-- Modicadores
public void setModelo (String _Modelo) {Modelo = _Modelo;}
public void setMarca (String _Marca) {Marca = _Marca;}
public void setPreco (oat _Preco) {Preco = _Preco;}
public void setCorTinta(String _Cor) {CorTinta = _Cor;}
Banco_dadosII-fechado.indb 130 18/6/2007 13:59:50
131
Banco de Dados II
Unidade 6
//-- Recuperadores
public String getModelo() { return Modelo;}
public String getMarca () { return Marca;}
public oat getPreco() { return Preco;}
public String getCorTinta() { return CorTinta;}
//-- Regras de Negcio
public void LerDados(){
setModelo(JOptionPane.showInputDialog(Informe o Modelo:));
setMarca (JOptionPane.showInputDialog(Informe a Marca:));
setPreco(Float.parseFloat(JOptionPane.showInputDialog(Preco:)));
setCorTinta(JOptionPane.showInputDialog(Cor da Caneta:));
}
public void ShowDados(){
JOptionPane.showMessageDialog(null,Dados da Caneta:\n +
Modelo: + getModelo() + \n+
Marca : + getMarca() + \n+
Preo : + getPreco() + \n+
Cor: + getCorTinta());
}
}
Essa classe implementa as regras de manipulao para um objeto
do tipo caneta. O usurio do sistema s poder manipular
essa caneta pelos mtodos pblicos, como o construtor, os
modicadores, os recuperadores e os mtodos de regras de
negcio.
Mas o que se ganha com isso?
Como a classe representa as regras de manipulao do objeto, a
partir do momento que voc estrutura a sua classe, passa a ter
total controle sobre a implementao, pois com certeza conhecer
todas as formas de uso dos objetos resultantes da classe que voc
criou.
Banco_dadosII-fechado.indb 131 18/6/2007 13:59:50
132
Universidade do Sul de Santa Catarina
Lembre-se que essa informao fundamental para voc que
criou a classe, mas deve ser abstrada pelo usurio do sistema,
pois para ele no importante saber como as classes funcionam
ou como foram implementadas.
A classe acima pode ser executada?
A resposta no. A classe acima implementa as regras da classe
caneta. Porm, essa classe no possui um mtodo principal,
chamado de main, e nem inteno t-lo.
Mas como executar essa classe?
Para execut-la preciso que em outra classe em Java seja
instanciado um objeto a partir dessa classe.
Ou seja, em outra classe voc precisa criar um atributo do tipo
caneta e a partir disso poder utiliz-lo por intermdio dos
mtodos pblicos.
Veja:
class usacaneta{
public static void main (String args[]){
//-- Criando um objeto do tipo caneta
caneta MinhaCaneta = new caneta();
//-- Usando o objeto MinhaCaneta
MinhaCaneta.LerDados();
MinhaCaneta.ShowDados();
//-- Sair do Programa
System.exit(0);
}
}
Banco_dadosII-fechado.indb 132 18/6/2007 13:59:50
133
Banco de Dados II
Unidade 6
O atributo MinhaCaneta representa a classe caneta. Ao ser
instanciado pelo comando new caneta(), o usurio poder utilizar
o objeto vontade, desde que referenciando os mtodos pblicos.
O resultado da execuo deste programa ser algo como:
Figura 6.1 - ENTRADA DOS DADOS POR MEIO DO MTODO LERDADOS()
Figura 6.2 - SADA DOS DADOS POR MEIO DO MTODO SHOWDADOS()
Note que para o usurio da classe caneta, ele nem precisa saber
como foram implementados os mtodos LerDados e ShowDados,
apenas precisa saber us-los.
Antes de continuar, que tal voc editar as duas classes acima no
JCreator, gravando-as no diretrio C:\BD2\Fontes. Depois
s executar a classe usacaneta e ver os resultados na tela do seu
computador.
Banco_dadosII-fechado.indb 133 18/6/2007 13:59:50
134
Universidade do Sul de Santa Catarina
Em resumo, podem-se tirar alguns comandos importantes da
classe caneta, veja!
Quadro 6.2 - LINHAS DE COMANDO E SUAS FUNES
Linha de Comando Funo
import javax.swing.*
A importao dessa classe se faz necessria para o uso
dos comandos JOptionPane.showInputDialog e
JOptionPane.showMessageDialog.
class caneta
A denio do nome da classe deve ser o mesmo
nome do arquivo .java.
public caneta
O mtodo construtor deve ter o mesmo nome da
classe e deve ser pblico.
private Os atributos devem ser privados.
public void
Os mtodos modicadores, alm de pblicos, no
retornam valor algum.
Alm disso, sempre recebe um valor como parmetro.
public String
Os mtodos recuperadores, alm de pblicos, sempre
retornam um valor que deve ser do mesmo tipo do
atributo ao qual ele esta referenciado.
Este mtodo nunca recebe parmetro.
Float.parseFloat
A entrada de dados via JOptionPane.
showMessageDialog sempre retorna uma String.
Sendo assim, foi necessrio converter um valor do tipo
String para o tipo Float.
\n Caractere especial para pulo de linha.
Os comandos apresentados no quadro no so muito diferentes
do que voc viu em Programao Orientada a Objetos. O que
pode mudar a forma de representao dos comandos nas classes,
mas o processo de codicao o mesmo, utilizando o que h
de melhor na programao orientada a objetos.
Na prxima seo voc incluir ao seu conhecimento em Java os
comandos de conexo e manipulao de banco de dados.
Banco_dadosII-fechado.indb 134 18/6/2007 13:59:50
135
Banco de Dados II
Unidade 6
SEO 2 Conexo ao banco de dados em Java
A conexo com um banco de dados, por meio da linguagem Java
pode ser dividida em trs processos distintos:
conectar ao banco de dados;
executar comandos com recuperao de dados Select;
executar comandos sem recuperao de dados Insert,
Update e Delete.
Sendo que, se o primeiro processo no for realizado com sucesso,
os demais no podem ser realizados.
Veja o organograma a seguir:
Grfco 6.2 - FORMA DE ACESSO AO UM SOFTWARE COM CONEXO AO
BANCO DE DADOS
Conectar ao
Banco de Dados
Usurio tem acesso
Conectou?
Comandos de
manipulao de dados
NO
SIM
Mensagem
de ERRO
Encerra o
programa
Banco de dados
SEGUE
Banco_dadosII-fechado.indb 169 18/6/2007 13:59:55
170
Universidade do Sul de Santa Catarina
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(SELECT * from Turmas);
ResultSetMetaData rsmd = rs.getMetaData();
int colunas = rsmd.getColumnCount();
String saida = ;
for (int i=0; i<colunas; i++) {
saida+=\nColuna: + rsmd.getColumnName (i + 1) +
\nTipo: + rsmd.getColumnTypeName (i + 1) +
\nTamanho: + rsmd.getColumnDisplaySize (i + 1) + \n;
}
JOptionPane.showMessageDialog(null,saida);
}catch(Exception e){
System.out.println(Erro de Conexo:+e.getMessage());
}
}
}
O resultado da execuo da classe ser algo como:
Figura 7.5 - ESTRUTURA DA TABELA TURMAS, LISTADA PELA CLASSE METADADOSTABELA
Banco_dadosII-fechado.indb 170 18/6/2007 13:59:55
171
Banco de Dados II
Unidade 7
O ideal que voc implemente essa classe no JCreator, compile
e execute para v-la funcionando. muito importante que voc
interaja com essas classes no JCreator, para se habituar com os
comandos e pratic-los.
SEO 4 Passagens de parmetros para seleo
Acredito que voc tenha notado nas implementaes das classes
anteriores que uma das principais caractersticas torn-las
genricas, de forma que possam atender as mais variadas
funcionalidades, sem que o programador tenha que reescrev-las.
Uma boa metodologia adotada para criao de classes
genricas o uso de passagens de parmetros para
o cdigo SQL.
Por exemplo, para consultar as turmas cadastradas pelo campo
chamado codigo_turma, o comando SQL caria assim:
Select * from Turmas where Codigo_Turma = <um_valor>;
O que mudaria nesse cdigo para a consulta de vrias
turmas?
O nico item nesse comando que pode ser alterado o valor do
cdigo da turma buscado. Ento, porque exigir do programador
que ele altere esse comando toda vez que for pesquisar uma nova
turma? Seria um desperdcio de tempo.
Uma forma de resolver ese problema a utilizao do mtodo
prepareStatement antes da execuo do comando SQL.
Banco_dadosII-fechado.indb 171 18/6/2007 13:59:55
172
Universidade do Sul de Santa Catarina
Sendo que o valor do campo que pode ser alterado passa a ser
representado por um smbolo de interrogao (?).
Veja a classe a seguir que implementa essa regra e depois volto a
detalhar como essa tcnica funciona:
import java.sql.*;
public class usodeParametros {
public static void main(String[] args) {
try{
String url = jdbc:odbc:AcessoDB;
String usuario = root;
String senha = virtual;
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Connection con = DriverManager.getConnection(url,usuario,senha);
System.out.println(Conectando.);
PreparedStatement st = con.prepareStatement(SELECT * +
FROM turmas +
WHERE Codigo_Turma = ?);
st.setString(1,3);
ResultSet rs = st.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(Codigo_Turma));
System.out.println(rs.getString(Descricao));
}
rs.close();
st.close();
}catch(Exception e){
System.out.println(Erro de Conexo: + e.getMessage());
}
}
}
Banco_dadosII-fechado.indb 172 18/6/2007 13:59:55
173
Banco de Dados II
Unidade 7
O diferencial da classe acima est nos cdigos:
PreparedStatement st = con.prepareStatement(SELECT * +
FROM turmas +
WHERE Codigo_Turma = ?);
O smbolo de interrogao ser substitudo pelo valor informado
na passagem de parmetros st.setString(1,3);
O primeiro item do mtodo st.setString() representa o nmero
do parmetro, nesse caso o cdigo tem apenas um parmetro (ou
seja, um ?). O segundo item representa o valor que ser buscado
na tabela.
Veja a gura a seguir.
PreparedStatement st=con.prepareStatement(SELECT * +
FROM turmas +
WHERE Codigo_Turma = ?);
st.setString(1,3);
Select * from Turmas
where Codigo_Turma = 3
Figura 7.6 - REPRESENTAO DO COMANDO SELECT APS RECEBER O PARMETRO
Note que o comando SQL de seleo receber o valor passado
como parmetro. Podem ser usados quantos parmetros forem
necessrios. Veja mais este exemplo, s que agora usando dois
parmetros:
import java.sql.*;
public class Metadados2 {
public static void main(String[] args) {
try{
String url = jdbc:odbc:AcessoDB;
String usuario = root;
String senha = virtual;
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Connection con = DriverManager.getConnection(url,usuario,senha);
System.out.println(Conectando.);
SEGUE
Banco_dadosII-fechado.indb 173 18/6/2007 13:59:56
174
Universidade do Sul de Santa Catarina
PreparedStatement st = con.prepareStatement(SELECT * +
FROM turmas +
WHERE Codigo_Turma = ? AND +
Descricao = ?);
st.setString(1,3);
st.setString(2,Sexta Serie A);
ResultSet rs = st.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(Codigo_Turma));
System.out.println(rs.getString(Descricao));
}
rs.close();
st.close();
}catch(Exception e){
System.out.println(Erro de Conexo: + e.getMessage());
}
}
}
O uso de parmetros pode facilitar em muito a vida
do programador, pois so muitas as regras de negcio
que envolve cada tabela de um banco de dados,
regras de insero, consulta, excluso e alterao.
No caso da linguagem Java, cada uma dessas tabelas gerenciada
por uma classe de controle, que implementa o que pode e o que
no se pode fazer com a tabela por parte do usurio do sistema.
Essas classes abrangem todos os cdigos vistos por voc at
agora, sempre buscando a generalidade da classe.
Mas isto assunto para a prxima unidade.
Banco_dadosII-fechado.indb 174 18/6/2007 13:59:56
175
Banco de Dados II
Unidade 7
Sntese
Voc pde estudar nesta unidade que a classe DatabaseMetaData
obtida pela instncia da classe Connection e oferece um conjunto
de recursos de recuperao de metadados da base de dados e
da sua conexo atual, podendo ser utilizada, por exemplo, para
vericar, a verso do Driver JDBC.
J, a classe ResultSetMetaData pode ser obtida por um ResultSet
previamente criado, possibilitando a recuperao de metadados
sobre as colunas das tabelas, como: quantidade de colunas,
nome e tipos das mesmas.
Com essas duas classes possvel recuperar informaes
dinamicamente de uma base de dados, tornado as classes
implementadas mais abstratas.
Atividades de auto-avaliao
1. Cite exemplos de metadados em banco de dados relacional.
Banco_dadosII-fechado.indb 175 18/6/2007 13:59:56
176
Universidade do Sul de Santa Catarina
2. De que forma a linguagem Java obtm informaes sobre os
metadados de um SGDB?
Saiba mais
ANSELMO, Fernando. Aplicando orientao a objetos
em Java.Visual Books, 2005.
COSTA, Luis Carlos da. Java para iniciantes. Cincia
Moderna, 2002.
HORSTMANN, Cay S. Big Java. Artmed Bookman,
2004.
RANGEL, Alexandre. Mysql-Projeto Modelagem
e Desenvolvimento de Banco de Dados. Alta Books,
2005.
SEGUE
Banco_dadosII-fechado.indb 191 18/6/2007 13:59:58
192
Universidade do Sul de Santa Catarina
22 }while(i==0 && MatriculaExiste(ValorLido));
23
24 if( Valores[i].equals() && (Campos[i].indexOf(*) != -1)){
25 JOptionPane.showMessageDialog(null, Este campo obrigatrio \n+
26 Por Favor, recadastre-o!);
27 }
28 else{
29 i++;
30 }
31 if (!ValorLido.equals())
32 itens++;
33 }
34 if (!Valores[18].equals()){
35 if (Valores[18].charAt(0) == S || Valores[18].charAt(0) == s)
36 Valores[18] = 1; //Sim
37 else
38 Valores[18] = 0; //No
39 }
40 j=0;
41 for(i=0;i<19;i++){
42 if (!Valores[i].equals()){
43 Mensagem = Mensagem + Campos[i] + : + Valores[i]+\n;
44 Colunas=Colunas+NomesColunas[i];
45 Dados =Dados +FormatoCampo(i+1,Valores[i]);
46 if (j < itens-1){
47 Colunas=Colunas + ,;
48 Dados = Dados + ,;
49
50
}
51 j++;
52 }
53 }
54 Escolha = JOptionPane.showInputDialog(Mensagem + \n Sim(S) - No(N));
55 if (Escolha.equalsIgnoreCase(S)){
56 Operacao = insert into alunos(+Colunas+) values (+Dados+);
57 try{
58 Comando.ExecutarComando(Operacao);
59 }catch(Exception e){
60 System.out.println(e.getMessage());
61 }
62 }
63
64 }
Banco_dadosII-fechado.indb 192 18/6/2007 13:59:58
193
Banco de Dados II
Unidade 8
Abaixo um comentrio sobre as principais operaes realizadas
pelo mtodo de cadastro de alunos.
1 Nome do mtodo.
2
Atributos para obteno do nome dos campos, total de campos cadastrados e obteno do
nome fsico das colunas.
3 Atributo para conrmao ou no do cadastro.
4 Atributo que apresentar os dados informados pelo usurio.
5
Atributo para armazenamento dos nomes das colunas, do valor de insero de cada coluna
e armazenamento do comando Insert gerado.
6 Atributo para armazenamento do valor informado pelo usurio.
7 Um aviso para o usurio de que os campos com * so obrigatrios.
9 Atributo para armazenamento de todos os valores informados pelo usurio do sistema.
11 Realiza um lao para a solicitao do valor de cadastro para todos os campos da tabela.
12 Solicita o valor do campo.
14 Repete o cadastro da matrcula at que seja informado um cdigo que ainda no foi usado.
15 Verica se o valor informado o da matrcula e se a mesma j foi cadastrada.
24 Verica se o campo cadastrado um campo obrigatrio, ou seja, possui um asterisco (*).
31
Verica se o valor do campo cadastrado diferente de vazio. Incrementa o contador de
campos cadastrados.
34
Verica se o campo informado o campo de Doao de Orgos. Se for, troca o valor Sim
por 1 e o valor No por 0.
41 Verica os valores cadastrados para todos os campos.
42 Se o valor no for vazio.
43 Monta a mensagem com o nome do campo e o valor cadastrado.
44 Monta o atributo Colunas com os nomes fsicos dos campos preenchidos;
45
Monta o atributo Dados com os valores informados para cada campo, vericando se o valor
deve ou no car entre aspas.
46
Se no for o ltimo campo cadastrado, acrescenta uma vrgula para separar cada nome de
coluna e cada valor informado pelo usurio.
54 Apresenta os valores cadastrados pelo usurio e solicita a conrmao do cadastro.
55 Se a escolha for sim, grava os dados na tabela de alunos.
Seo 7 Excluindo os dados da Tabela de Alunos
Para realizar a excluso dos dados da Tabela de Alunos preciso
especicar um campo de referncia que identique de forma
nica o registro do aluno a ser excludo.
Como a Tabela de Alunos possui como chave primria a
matrcula, a excluso usar essa informao como referncia para
identicao e excluso do aluno.
Banco_dadosII-fechado.indb 193 18/6/2007 13:59:58
194
Universidade do Sul de Santa Catarina
Porm, antes de exclu-lo, necessrio que se verique se o aluno
pesquisado existe ou no na base de dados.
Com base nessas premissas, o cdigo do mtodo de excluso de
alunos ter a seguinte estrutura:
1 public void ExcluirPorMatricula(){
2 String Escolha = S;
3 String Saida = ;
4 String Mat = JOptionPane.showInputDialog(Informe a Matrcula para Excluso:);
5 try{
6 Comando.ExecutarComando(select * from alunos where Matricula = + Mat);
7 ResultSet rs = Comando.getResultadoSQL();
8 while(rs.next())
9 {
10 Saida = Matrcula: + rs.getString(Matricula)+\n+
11 Nome : + rs.getString(Nome);
12 }
13 if (Saida.equals()){
14 JOptionPane.showMessageDialog(null,Matrcula Inexistente!);
15 }
16 else{
17 JOptionPane.showInputDialog(Conrma a excluso do Aluno:\n+
18 Saida+\n+
19 Sim(S) - No(N));
20 if (Escolha.equalsIgnoreCase(S))
21 Comando.ExecutarComando(
22 Delete from alunos where Matricula = + Mat);
23 }
24 }catch(Exception e){
25 System.out.println(Excluso no pode ser feita!+e.getMessage());
26 }
27 }
Para saber como funciona essa implementao, veja a descrio a
seguir:
2 Conrma a excluso.
3 Atributo para apresentao do nome e da matrcula do aluno selecionado.
4 Solicita a matrcula do aluno a ser excludo.
6 Seleciona os alunos com a matrcula informada.
7 Armazena o resultado do Select.
8 Varre todos os registros retornados pelo Select.
11 Armazena o nome e a matrcula do aluno localizado pelo Select.
13 Se o atributo Sada estiver vazio, porque nenhum aluno foi localizado.
16
Se o atributo Sada diferente de vazio, ento apresenta na tela o nome e a matrcula do
aluno e solicita a conrmao da excluso.
20 Se a escolha for Sim, exclui os alunos com a matrcula informada.
Banco_dadosII-fechado.indb 194 18/6/2007 13:59:59
195
Banco de Dados II
Unidade 8
Seo 8 Alterando os dados da Tabela de Alunos
O processo de alterao de dados do aluno muito semelhante
ao processo de excluso, pois tanto a operao de excluso quanto
a operao de alterao s podem ser realizadas se o aluno
pesquisado existir no banco de dados.
Com relao alterao, o usurio do sistema poder visualizar
o valor cadastrado para cada campo da tabela e alter-lo se assim
desejar, com exceo da matrcula, pois esse campo nico por
se tratar de uma chave primria. O aluno poder ter qualquer um
dos seus dados alterados, menos a matrcula.
O processo de alterao possui as regras de pesquisas j utilizadas
no processo de excluso para saber se o aluno est ou no
cadastrado e utiliza tambm as regras de cadastramentos dos
dados para a nova insero de valores em cada campo da tabela.
Por isso, que ao analisar o cdigo-fonte da rotina de
alterao, voc encontrar muitas expresses que j so de seu
conhecimento.
Veja a seguir a codicao do processo de alterao de dados dos
alunos:
1 public void AlterarPorMatricula(){
2 int i;
3 String Valores[] = new String[19];
4 String Saida = ;
5 String Escolha = S;
6 String ValorLido = ;
7 String Colunas = ;
8 String Dados = ;
9 String Operacao = ;
10 String Mat = JOptionPane.showInputDialog(
11 Informe a Matrcula para Alterao:);
12 try{
13 Comando.ExecutarComando(
14 select * from alunos where Matricula = + Mat);
15 ResultSet rs = Comando.getResultadoSQL();
16 if (rs.next()){
17 Rsmd = rs.getMetaData();
18 for (i=1;i <= Rsmd.getColumnCount();i++){
19 Valores[i-1] = rs.getString(Rsmd.getColumnName(i));
SEGUE
Banco_dadosII-fechado.indb 195 18/6/2007 13:59:59
196
Universidade do Sul de Santa Catarina
20 if (i == 19){
21 if(Valores[i-1].equals(1))
22 Valores[i-1] = Sim;
23 else
24 Valores[i-1] = No;
25 }
26 Saida = Saida + Campos[i-1]+:+Valores[i-1]+\n;
27 }
28
}
29 if (Saida.equals()){
30 JOptionPane.showMessageDialog(null,Matrcula Inexistente!);
31 }
32 else{
33 Escolha = JOptionPane.showInputDialog(Conrma a alterao do Aluno:\n+
34 Saida+\n+
35 Sim(S) - No(N));
36 if (Escolha.equalsIgnoreCase(S)){
37 i=2;
38 while (i<=19){
39 Valores[i-1] = JOptionPane.showInputDialog(
40 Campos[i-1],Valores[i-1]);
41 if( Valores[i-1].equals() && (Campos[i-1].indexOf(*) != -1)){
42 JOptionPane.showMessageDialog(null,
43 Este campo obrigatrio \n+
44
Por Favor, recadastre-o!);
45 }
46 else{
47 if (i==19 && (!Valores[i-1].equals())){
48 if (Valores[i-1].charAt(0) == S ||
49 Valores[i-1].charAt(0) == s)
50 Valores[i-1] = 1; //Sim
51 else
52 Valores[i-1] = 0; //No
53 }
54 i++;
55 }
56 }
57 Operacao = Update Alunos set ;
58 for (i=1;i<19;i++){
59 if (!Valores[i].equals()){
60 Operacao = Operacao + NomesColunas[i] + =+
61 FormatoCampo(i+1,Valores[i]);
SEGUE
Banco_dadosII-fechado.indb 196 18/6/2007 13:59:59
197
Banco de Dados II
Unidade 8
62 if (i < 18){
63 Operacao = Operacao + ,;
64 }
65 }
66 }
67 Operacao = Operacao + where Matricula = + Mat;
68 Comando.ExecutarComando(Operacao);
69 }
70 }
71 }catch(Exception e){
72 System.out.println(Alterao no pode ser feita!+e.getMessage());
73 }
74
75 }
Como essa rotina um pouco mais extensa que as anteriores, vou
descrev-la por blocos, para facilitar o seu entendimento, ok?
public void AlterarPorMatricula(){
int i;
String Valores[] = new String[19];
String Saida = ;
String Escolha = S;
String ValorLido = ;
String Colunas = ;
String Dados = ;
String Operacao = ;
String Mat = JOptionPane.showInputDialog(
Informe a Matrcula para Alterao:
);
Nessas linhas iniciais da rotina de alterao so apresentados
os atributos de armazenamento e realizado o processo de
solicitao da matrcula do aluno que ter os dados alterados.
Banco_dadosII-fechado.indb 197 18/6/2007 13:59:59
198
Universidade do Sul de Santa Catarina
Comando.ExecutarComando(
select * from alunos where Matricula = + Mat);
ResultSet rs = Comando.getResultadoSQL();
if (rs.next()){
Rsmd = rs.getMetaData();
for (i=1;i <= Rsmd.getColumnCount();i++){
Valores[i-1] = rs.getString(Rsmd.getColumnName(i));
if (i == 19){
if(Valores[i-1].equals(1))
Valores[i-1] = Sim;
else
Valores[i-1] = No;
}
Saida = Saida + Campos[i-1]+:+Valores[i-1]+\n;
}
}
Nesse bloco de comandos, o primeiro processo corresponde
execuo de um comando Select para vericar se a matrcula
pesquisada est cadastrada no banco de dados.
A condio rs.next() ir retorna True (verdadeiro) caso exista um
aluno cadastrado com o cdigo de matrcula pesquisado.
Com a utilizao da classe ResultSetMetaData possvel realizar
um lao que passe por todas as colunas da Tabela de Alunos,
iniciando na coluna da posio 1 at a coluna nal, representada
pelo mtodo getColumnName().
Com base na coluna acessada, utilizando-se do mtodo
getString(), os valores de cada coluna da tabela, ou seja, os dados
j cadastrados no banco de dados, so armazenados no vetor
chamado Valores.
Como o campo da Tabela de Alunos, chamado Doador, um
inteiro, ali s pode ser armazenado um valor 1 quando o aluno
doador e um valor 0 quando ele no doador. Para evitar que
seja apresentada uma mensagem do tipo, Doador = 1, feita uma
converso de 1 para Sim e 0 para No.
Todos os dados, como nome do campo e valor do campo, so
armazenado no atributo do tipo string chamado Sada.
Banco_dadosII-fechado.indb 198 18/6/2007 13:59:59
199
Banco de Dados II
Unidade 8
if (Saida.equals()){
JOptionPane.showMessageDialog(null,Matrcula Inexistente!);
}
else{
Escolha = JOptionPane.showInputDialog(Conrma a alterao do Aluno:\n+
Saida+\n+
Sim(S) - No(N));
if (Escolha.equalsIgnoreCase(S)){
i=2;
while (i<=19){
Valores[i-1] = JOptionPane.showInputDialog(
Campos[i-1],Valores[i-1]);
if( Valores[i-1].equals() && (Campos[i-1].indexOf(*) != -1)){
JOptionPane.showMessageDialog(null,
Este campo obrigatrio \n+
Por Favor, recadastre-o!);
}
else{
if (i==19 && (!Valores[i-1].equals())){
if (Valores[i-1].charAt(0) == S ||
Valores[i-1].charAt(0) == s)
Valores[i-1] = 1; //Sim
else
Valores[i-1] = 0; //No
}
i++;
}
}
Se o atributo Sada estiver com o valor de nulo, vazio, isso
signica que a matrcula pesquisada no existe no banco de
dados. Caso contrrio, ser solicitado ao usurio o valor de cada
campo da tabela para que ele faa um recadastramento.
No processo de recadastramento, por meio do JOptionPane.
showInputDialog, o usurio verica o nome do campo pelo
atributo Campos[i-1] e visualiza o valor atual cadastrado, pelo
do atributo Valores[i-1]. Caso o valor no precise ser alterado,
basta que ele clique no boto Ok, na janela que se abriu.
Nos campos obrigatrios, ser necessrio que o usurio informe
um valor, caso contrrio o sistema mandar uma mensagem e
s continuar o cadastro quando a regra de obrigatoriedade for
obedecida.
Para o campo Doador, ser feita uma converso de Sim para 1 e
No para 2.
Banco_dadosII-fechado.indb 199 18/6/2007 13:59:59
200
Universidade do Sul de Santa Catarina
Operacao = Update Alunos set ;
for (i=1;i<19;i++){
if (!Valores[i].equals()){
Operacao = Operacao + NomesColunas[i] + =+
FormatoCampo(i+1,Valores[i]);
if (i < 18){
Operacao = Operacao + ,;
}
}
}
Operacao = Operacao + where Matricula = + Mat;
Comando.ExecutarComando(Operacao);
}
}
}catch(Exception e){
System.out.println(Alterao no pode ser feita!+e.getMessage());
}
}
Nesse bloco nal gerada a sintaxe do comando em SQL para
alterao dos dados da tabela, de forma que o atributo Operao
tenha um valor parecido como:
Update Alunos set Campo1 = Valor1, Campo2 = Valor2,....,CampoN=Valor N
where Matricula = Valor_Procurado.
Note que no ltimo campo alterado ele no separado por
vrgula, por isso a condio if(i < 18) no cdigo para vericar se
a rotina est montando a sintaxe para o ltimo campo alterado da
tabela.
Com mais esta seo, voc pode vericar todo o processo de
cadastramento e povoamento de dados da Tabela de Alunos.
Mas ainda falta o processo de pesquisa de dados dos alunos, na
qual o usurio informa um nome ou uma matrcula e o sistema
apresenta os dados cadastrados.
Mas isso assunto para prxima unidade.
Banco_dadosII-fechado.indb 200 18/6/2007 14:00:00
201
Banco de Dados II
Unidade 8
Por enquanto, d uma analisada no cdigo a seguir que apresenta
todas as rotinas implementadas pela classe Alunos:
1 import javax.swing.*;
2 import java.sql.*;
3 import java.util.*;
4
5 class Alunos{
6
7 private ResultSetMetaData Rsmd;
8 private ComandosSQL Comando;
9 private String NomesColunas[] = new String [19];
10 private String Campos[] =
11 {Matrcula * ,
12 Nome * ,
13 Data de Nascimento * ,
14 Idade * ,
15 CPF,
16 RG,
17 Nome do Pai * ,
18 Nome da Me * ,
19 Endereo * ,
20 Nmero * ,
21 Cidade * ,
22 Estado * ,
23 Bairro * ,
24 Telefone ,
25 Celular,
26 Responsvel,
27 Alrgico a,
28 Grupo Sanguneo,
29 Doador de Orgos Sim/No
30 };
31
32
33 public Alunos(){
34 Comando = new ComandosSQL();
35 Comando.AbrirConexao(AcessoDB,root,virtual);
36 if (!Comando.getConectou()){
37 JOptionPane.showMessageDialog(null,Erro de Conexo com Banco de Dados\n +
38 Entre em contato com Suporte ! \n +
39 A aplicao ser FECHADA ! );
40 System.exit(0);
41 }
42 else{
SEGUE
Banco_dadosII-fechado.indb 201 18/6/2007 14:00:00
202
Universidade do Sul de Santa Catarina
43 try{
44 Comando.ExecutarComando(select * from alunos);
45 ResultSet res = Comando.getResultadoSQL();
46 GerarNomesColunas(res);
47 }catch(Exception e){
48 System.out.println(Erro Gerando Nome das Colunas);
49 }
50 }
51 }
52
53 public boolean MatriculaExiste(String Mat){
54 try{
55 Comando.ExecutarComando(select * from alunos where Matricula = + Mat);
56 ResultSet rs = Comando.getResultadoSQL();
57 return (rs.next());
58 }catch(Exception e){
59 System.out.println(Erro Pesquisando Matricula.);
60 return true;
61 }
62
63 }
64
65
66 public void GerarNomesColunas(ResultSet rs){
67
try{
68 Rsmd = rs.getMetaData();
69 for (int i = 1; i <= Rsmd.getColumnCount(); i++)
70 NomesColunas[i-1] = Rsmd.getColumnName(i);
71 }catch(Exception e){
72 System.out.println(Erro Gerando Nome das Colunas);
73 }
74 }
75
76 public String FormatoCampo(int Pos,String Valor){
77
String Saida=Valor;
78
try{
79 switch(Rsmd.getColumnType(Pos))
80 {
81 case Types.VARCHAR:Saida = + Valor +;
82 break;
83 case Types.DATE: Saida = +Valor +;
84 break;
85 case Types.INTEGER: Saida = Valor;
86 break;
87 case Types.CHAR: Saida = +Valor+;
SEGUE
Banco_dadosII-fechado.indb 202 18/6/2007 14:00:00
203
Banco de Dados II
Unidade 8
88 break;
89 case Types.FLOAT:Saida = Valor;
90 break;
91 }
92 return Saida;
93 }catch(Exception e) {
94 return Saida;
95 }
96
97 }
98
99 public void CadastrarDados(){
100 int i=0,itens=0,j=0;
101 String Escolha = S;
102 String Mensagem = Conrma o Cadastro dos Seguintes Dados: \n;
103 String Colunas=,Dados=,Operacao=;
104 String ValorLido=;
105 JOptionPane.showMessageDialog(null, Cadastro de ALUNOS \n+
106 Os campos com * so Obrigatrios!);
107 String Valores[] = new String[19];
108
109 while (i < 19){
110 Valores[i] = JOptionPane.showInputDialog(null,Campos[i]);
111 ValorLido = Valores[i];
112 do{
113 if (i == 0 && MatriculaExiste(ValorLido)){
114
JOptionPane.showMessageDialog(null,Este Nmero de Matrcula j
foi usado!\n+
115 Informe um novo cdigo para Matrcula);
116 ValorLido = JOptionPane.showInputDialog(null,Campos[i]);
117 Valores[i] = ValorLido;
118
}
119 }while(i==0 && MatriculaExiste(ValorLido));
120
121 if( Valores[i].equals() && (Campos[i].indexOf(*) != -1)){
122 JOptionPane.showMessageDialog(null, Este campo obrigatrio \n+
123 Por Favor, recadastre-o!);
124 }
125 else{
126 i++;
127 }
128 if (!ValorLido.equals())
129 itens++;
130 }
131 if (!Valores[18].equals()){
132 if (Valores[18].charAt(0) == S || Valores[18].charAt(0) == s)
SEGUE
Banco_dadosII-fechado.indb 203 18/6/2007 14:00:00
204
Universidade do Sul de Santa Catarina
133 Valores[18] = 1; //Sim
134 else
135 Valores[18] = 0; //No
136 }
137 j=0;
138 for(i=0;i<19;i++){
139 if (!Valores[i].equals()){
140 Mensagem = Mensagem + Campos[i] + : + Valores[i]+\n;
141 Colunas=Colunas+NomesColunas[i];
142 Dados =Dados +FormatoCampo(i+1,Valores[i]);
143 if (j < itens-1){
144 Colunas=Colunas + ,;
145 Dados = Dados + ,;
146
147 }
148 j++;
149 }
150 }
151 Escolha = JOptionPane.showInputDialog(Mensagem + \n Sim(S) - No(N));
152 if (Escolha.equalsIgnoreCase(S)){
153 Operacao = insert into alunos(+Colunas+) values (+Dados+);
154 try{
155 Comando.ExecutarComando(Operacao);
156 }catch(Exception e){
157 System.out.println(e.getMessage());
158 }
159 }
160
161 }
162
163 public void ExcluirPorMatricula(){
164 String Valores[] = new String[19];
165 String Escolha = S;
166 String Saida = ;
167 String Mat = JOptionPane.showInputDialog(Informe a Matrcula para Excluso:);
168 try{
169 Comando.ExecutarComando(select * from alunos where Matricula = + Mat);
170 ResultSet rs = Comando.getResultadoSQL();
171 if (rs.next()){
172 Rsmd = rs.getMetaData();
173 for (int i = 1; i <= 2; i++) {
174 Valores[i-1] = rs.getString(Rsmd.getColumnName(i));
175 Saida = Saida + Campos[i-1]+:+Valores[i-1]+\n;
176 }
SEGUE
Banco_dadosII-fechado.indb 204 18/6/2007 14:00:00
205
Banco de Dados II
Unidade 8
177 }
178
179 if (Saida.equals()){
180 JOptionPane.showMessageDialog(null,Matrcula Inexistente!);
181 }
182 else{
183 JOptionPane.showInputDialog(Conrma a excluso do Aluno:\n+
184 Saida+\n+
185 Sim(S) - No(N));
186 if (Escolha.equalsIgnoreCase(S))
187 Comando.ExecutarComando(Delete from alunos where Matricula = + Mat);
188 }
189 }catch(Exception e){
190 System.out.println(Excluso no pode ser feita!+e.getMessage());
191 }
192
193 }
194
195 public void AlterarPorMatricula(){
196 int i;
197 String Valores[] = new String[19];
198 String Saida = ;
199 String Escolha = S;
200 String ValorLido = ;
201 String Colunas = ;
202 String Dados = ;
203 String Operacao = ;
204 String Mat = JOptionPane.showInputDialog(Informe a Matrcula para Alterao:);
205 try{
206 Comando.ExecutarComando(select * from alunos where Matricula = + Mat);
207 ResultSet rs = Comando.getResultadoSQL();
208 if (rs.next()){
209 Rsmd = rs.getMetaData();
210 for (i=1;i <= Rsmd.getColumnCount();i++){
211 Valores[i-1] = rs.getString(Rsmd.getColumnName(i));
212 if (i == 19){
213 if(Valores[i-1].equals(1))
214 Valores[i-1] = Sim;
215 else
216 Valores[i-1] = No;
217 }
218 Saida = Saida + Campos[i-1]+:+Valores[i-1]+\n;
219 }
SEGUE
Banco_dadosII-fechado.indb 205 18/6/2007 14:00:01
206
Universidade do Sul de Santa Catarina
220 }
221
222 if (Saida.equals()){
223 JOptionPane.showMessageDialog(null,Matrcula Inexistente!);
224 }
225 else{
226 Escolha = JOptionPane.showInputDialog(Conrma a alterao do Aluno:\n+
227 Saida+\n+
228 Sim(S) - No(N));
229 if (Escolha.equalsIgnoreCase(S)){
230 i=2;
231 while (i<=19){
232 Valores[i-1] = JOptionPane.showInputDialog(null,Campos[i-1],Valores[i-1]);
233 if( Valores[i-1].equals() && (Campos[i-1].indexOf(*) != -1)){
234
JOptionPane.showMessageDialog(null, Este campo obrigatrio
\n+
235 Por Favor, recadastre-o!);
236 }
237 else{
238 if (i==19 && (!Valores[i-1].equals())){
239
if (Valores[i-1].charAt(0) == S || Valores[i-1].charAt(0)
== s)
240 Valores[i-1] = 1; //Sim
241 else
242 Valores[i-1] = 0; //No
243 }
244 i++;
245 }
246 }
247 Operacao = Update Alunos set ;
248 for (i=1;i<19;i++){
249 if (!Valores[i].equals()){
250 Operacao = Operacao + NomesColunas[i] + =+
251 FormatoCampo(i+1,Valores[i]);
252 if (i < 18){
253 Operacao = Operacao + ,;
254 }
255 }
256 }
257 Operacao = Operacao + where Matricula = + Mat;
258 Comando.ExecutarComando(Operacao);
259 }
260 }
261 }catch(Exception e){
262 System.out.println(Alterao no pode ser feita!+e.getMessage());
263 }
264 }
265 }
Banco_dadosII-fechado.indb 206 18/6/2007 14:00:01
207
Banco de Dados II
Unidade 8
Sntese
Nesta unidade voc pde mais do que estudar, pde praticar as
tcnicas de programao em Java para a criao de uma aplicao
comercial com acesso a banco de dados.
O processo de implementao de uma soluo computacional
pode ser mais bem elaborado quando dividido em subprogramas,
ou mtodos de programao.
Dividindo-se o problema, ca simples de chegar a uma
soluo desejada. No caso da classe Alunos, os processos de
cadastramento, excluso e alterao foram solucionados de forma
independente, para que problemas de desenvolvimento de um
processo no inuenciassem negativamente em outros.
Com isso, as solues foram sendo projetadas e implementadas de
forma segura e, principalmente, organizada.
Assim, a unio das partes com certeza vai representar um todo.
Banco_dadosII-fechado.indb 207 18/6/2007 14:00:01
208
Universidade do Sul de Santa Catarina
Atividades de auto-avaliao
1. Qual a fnalidade em se criar uma rotina de verifcao para valores
cadastrados em colunas do tipo chave primria?
Saiba mais
HORSTMANN, C. S. Big Java. Porto Alegre: Artmed
Bookman, 2004.
THOMPSON, M. A. Java 2 & Banco de Dados. Erica,
2002.
Na Internet:
http://www.guj.com.br
http://www.mundojava.com.br