Professional Documents
Culture Documents
Banco de Dados II
Disciplina na modalidade a distncia
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 Ambiente Virtual de Aprendizagem. Nossa equipe ter o maior prazer em atend-lo, pois sua aprendizagem nosso principal objetivo. Bom estudo e sucesso!
Equipe UnisulVirtual.
Marcelo Medeiros
Banco de Dados II
Livro didtico
Copyright UnisulVirtual 2006 Nenhuma parte desta publicao pode ser reproduzida por qualquer meio sem a prvia autorizao desta instituio.
005.75 M43 Medeiros, Marcelo Banco de dados II : livro didtico / Marcelo Medeiros ; design instrucional Flavia Lumi Matuzawa, Viviane Bastos. Palhoa : UnisulVirtual, 2006. 194p. : il. ; 28 cm. Inclui bibliograa. ISBN 978-85-60694-15-3 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
Crditos
Unisul - Universidade do Sul de Santa Catarina UnisulVirtual - Educao Superior a Distncia
Campus UnisulVirtual Rua Joo Pereira dos Santos, 303 Palhoa - SC - 88130-475 Fone/fax: (48) 3279-1541 e 3279-1542 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 Pr-Reitor Administrativo Marcus Vincius Antoles da Silva Ferreira Campus Tubaro e Ararangu Diretor: Valter Alves Schmitz Neto Diretora adjunta: Alexandra Orseni Campus Grande Florianpolis e Norte da Ilha Diretor: Ailton Nazareno Soares Diretora adjunta: Cibele Schuelter Campus UnisulVirtual Diretor: Joo Vianney Diretora adjunta: Jucimara Roesler Diva Marlia Flemming Elisa Flemming Luz Itamar Pedro Bevilaqua Janete Elza Felisbino Jucimara Roesler Lauro Jos Ballock Luiz Guilherme Buchmann Figueiredo Luiz Otvio Botelho Lento Marcelo Cavalcanti Mauri Luiz Heerdt Mauro Faccioni Filho Nlio Herzmann Onei Tadeu Dutra Patrcia Alberton Patrcia Pozza Rafael Pete da Silva Raulino Jac Brning Design Grco Cristiano Neri Gonalves Ribeiro (coordenador) Adriana Ferreira dos Santos Alex Sandro Xavier Fernando Roberto Dias Zimmermann Higor Ghisi Luciano Pedro Paulo Alves Teixeira Rafael Pessi Vilson Martins Filho Equipe Didtico-Pedaggica Angelita Maral Flores Carmen Maria Cipriani Pandini Carolina Hoeller da Silva Boeing Cristina Klipp de Oliveira Dalva Maria Alves Godoy Daniela Erani Monteiro Will Dnia Falco de Bittencourt Elisa Flemming Luz Enzo de Oliveira Moreira Flvia Lumi Matuzawa Karla Leonora Dahse Nunes Mrcia Loch Patrcia Meneghel Silvana Denise Guimares Tade-Ane de Amorim Vanessa de Andrade Manuel Vanessa Francine Corra Viviane Bastos Viviani Poyer Logstica de Encontros Presenciais Caroline Batista (Coordenadora) Aracelli Araldi Juliana Costa Pinheiro Letcia Cristina Pinheiro Priscila Santos Alves Monitoria e Suporte Harrison Laske (coordenador) Adriana Silveira Caroline Mendona Edison Rodrigo Valim Gislane Frasson de Souza Josiane Conceio Leal Rafael da Cunha Lara Vincius Maycot Seram Produo Industrial e Logstica Arthur Emmanuel F. Silveira Eduardo Kraus Francisco Asp Jeferson Cassiano Almeida da Costa Projetos Corporativos Diane Dal Mago Vanderlei Brasil Secretaria de Ensino a Distncia Karine Augusta Zanoni (secretria de ensino) Djeime Sammer Bortolotti Carla Cristina Sbardella Grasiela Martins James Marcel Silva Ribeiro Lamuni Souza Liana Pamplona Maira Marina Martins Godinho Marcelo Pereira Marcos Alcides Medeiros Junior Maria Isabel Aragon Olavo Lajs Priscilla Geovana Pagani Ricardo Alexandre Bianchini Silvana Henrique Silva Secretria Executiva Viviane Schalata Martins Tecnologia Osmar de Oliveira Braz Jnior (coordenador) Giorgio Massignani Rodrigo de Barcelos Martins Sidnei Rodrigo Basei
Equipe UnisulVirtual
Administrao Renato Andr Luz Valmir Vencio Incio Bibliotecria Soraya Arruda Waltrick Coordenao dos Cursos Adriano Srgio da Cunha Ana Luisa Mlbert Ana Paula Reusing Pacheco
Reviso Ortogrca
Nome do REVISOR
Impresso
Postmix
Sumrio
Apresentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 03 Palavras do professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09 Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 UNIDADE UNIDADE UNIDADE UNIDADE UNIDADE UNIDADE UNIDADE UNIDADE UNIDADE 1 2 3 4 5 6 7 8 9 Sistema computacional como soluo do problema . . . . . . . . . . . . 15 Preparando o ambiente de banco de dados . . . . . . . . . . . . . . . . . . . . 43 Ambiente de programao Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Linguagem de definio de dados - DDL . . . . . . . . . . . . . . . . . . . . . . . 91 Ambiente de desenvolvimento integrado . . . . . . . . . . . . . . . . . . . . . 107 Comandos em Java para conexo com banco de dados . . . . . . . 127 Comandos em Java para Apresentao dos Dados . . . . . . . . . . . . 157 Criando a aplicao de cadastro de alunos . . . . . . . . . . . . . . . . . . . . 177 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
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!
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 Ambiente Virtual de Aprendizagem - AVA; as atividades de avaliao (complementares, a distncia e presenciais).
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.
Objetivo
Apresentar os principais conceitos de sistemas de Banco de Dados e as tcnicas de modelagem de dados que permitam ao aluno o desenvolvimento de sistemas computacionais com acesso a banco de dados, atravs de uma linguagem de programao de alto nvel. Ao nal do curso o aluno dever ser capaz de: Avaliar os sistemas de Banco de dados existentes; Elaborar modelo conceitual atravs da abordagem entidade-relacionamento; Criar sicamente um banco de dados; Implementar rotinas de programao para conexo e manipulao de um banco de dados em Java. Criar um software com acesso ao SGDB MYSQL.
Carga horria
90 horas 6 crditos.
12
Banco de Dados I
Atividades
Avaliao a Distncia 1 Avaliao a Distncia 2 Avaliao Presencial 1 Avaliao Presencial 2 (2 chamada) Avaliao Final (caso necessrio)
13
UNIDADE 1
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.
16
Banco de Dados II
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 diaa-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!
Unidade 1
17
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;
18
Banco de Dados II
apresentar um Projeto Lgico e um Projeto Fsico para implementao e funcionamento do sistema; prever o perodo de testes e treinamento dos usurios e, quando necessrio, indicar as melhores solues para a manuteno do sistema. Vale uma observao importante de que existe uma diferena muito clara entre projeto lgico e projeto fsico, conforme mostrado na tabela a seguir:
QUADRO 1.1 - COMPARATIVO ENTRE O PROJETO LGICO E PROJETO FSICO
Projeto Lgico
O objetivo do projeto lgico a especicao detalhada dos elementos do software quanto lgica, sem se preocupar com as ferramentas que sero utilizadas. Finalidade: captao das informaes, anlise e correes;
Projeto Fsico
Tendo como base o Projeto Lgico, o objetivo do projeto fsico detalhar os elementos do software quanto ao fsico, se preocupando com as ferramentas computacionais que sero utilizadas. Finalidade: especicao tcnica completa do software, visando a sua implementao, como linguagem de programao e o sistema de banco de dados utilizado.
Quando se trabalha com desenvolvimento de softwares, duas palavras so muito comuns: implementao e implantao, porm, apesar de sonoridades parecidas, cada uma delas possui uma nalidade nica no processo de criao de um software. Veja as denies a seguir.
Implementao: tarefa de desenvolvimento e simulao do software especificado nos projetos lgico e fsico. Tem como resultado os programas de cdigo fonte, as modelagens do sistema e do banco de dados, bem como as documentaes de regras de funcionamento do sistema desenvolvido. Implantao: tem como objetivo o treinamento do usurio, as configuraes e a instalao do sistema implementado no cliente, como um produto final, constando de manual do usurio e termos de garantia.
Unidade 1
19
Note que cada uma destas tarefas - denio do Projeto Lgico, Projeto Fsico, implementao e implantao - possui uma ordem cronolgica. No possvel implantar um sistema sem que ele tenha sido implementado. Por outro lado, ca complicado implement-lo sem que sejam denidos os projetos Lgico e Fsico. Essa ordem cronolgica recebe o nome de ciclo de vida do sistema computacional, e pode ser representada pelo seguinte organograma:
GRFICO 1.1 - CICLO DE VIDA DO SOFTWARE
20
Banco de Dados II
Como em qualquer rea de desenvolvimento, a etapa de planejamento fundamental. No organograma apresentado, pode-se ver que os processos de levantamento de requisitos, projetos Lgico e Fsico, e a implementao podem acontecer repetidas e inmeras vezes at que o teste do sistema chegue ao resultado esperado pelo usurio-nal.
Quanto maior a especificao dos requisitos funcionais do sistema, com um alto nvel de anlise e avaliao dos dados coletados, maior a probabilidade de se alcanar o sucesso desejado na etapa de testes do sistema.
Lembre-se que quanto mais tempo levar para chegar ao resultado desejado, mais caro se torna o projeto - alm de gerar no cliente que contratou os servios certa desconana sobre a qualidade do produto nal. Para achar o ponto ideal na administrao do tempo e da qualidade, necessria a experincia do dia-a-dia. Cada projeto de implementao de software possui uma particularidade, na qual, mesmo semelhante a outros projetos j desenvolvidos, pode apresentar funcionalidades e necessidades diferentes. A experincia de cada novo projeto que vai lapidando a capacidade do desenvolvedor de software em analisar requisitos e transform-los em softwares.
Por isso, no se assuste, pois esse amadurecimento leva tempo, requer pacincia, dedicao e estudo!
Na prxima seo voc ver o problema proposto por mim para ser analisado e transformado em um sistema computacional. Quem sabe, no comea a a sua grande carreira como desenvolvedor de softwares? At l!
Unidade 1
21
O problema
O proprietrio da escola Sabe Tudo, deseja implantar na sua escola um sistema para controle acadmico de seus alunos. Apesar de a escola ser antiga, bem conceituada e possuir vrios alunos, no h no setor administrativo nenhum sistema computacional para cadastramento dos seus alunos. Todos os cadastros de alunos, disciplinas e matrculas so realizados em uma planilha de computador, sem controle algum de acesso. Alm de tornar o processo muito demorado, vrios problemas ocorrem, como: os mesmos dados so cadastrados vrias vezes; os registros so cadastrados de forma incompleta; os alunos so cadastrados em turmas erradas; no h controle de alunos matriculados, nem de turmas com vagas; faltam dados nos registros; as pesquisas por dados de alunos, cursos, turmas e disciplinas so muito demoradas e muitas vezes os pais dos alunos reclamam da demora no atendimento.
22
Banco de Dados II
Dessa forma, ele busca implantar um sistema que permita o cadastro dos alunos, professores, matrculas e disciplinas. Esse sistema deve rodar em um servidor que car instalado na sala da diretoria e todos os funcionrios tero acesso ao sistema por meio de computadores instalados no apoio pedaggico e na sala dos professores. Um ponto importante relatado pelo dono da escola que o sistema deve ter um custo acessvel, pois no inteno dele um alto investimento na rea de informtica no momento.
o sistema dever ter um controle de acesso de usurios; o sistema dever permitir o cadastramento de dados dos alunos, professores, disciplinas e realizar a matrcula dos alunos; o sistema dever funcionar em uma plataforma cliente-servidor, na qual o banco de dados estar instalado em um servidor na sala da diretoria e as mquinas cliente sero acessadas de dois pontos distintos, como a sala de apoio e sala dos professores; alguns dados devem ser obrigatoriamente cadastrados; dados repetidos no podem ser cadastrados; o sistema deve possibilitar formas de pesquisas aos alunos, cursos, disciplinas e turma com vagas; o sistema deve evitar o cadastramento de alunos em turmas erradas.
Unidade 1
23
Dados complementares Como os dados atuais esto defasados, o dono da escola apresentou as chas cadastrais de alunos, professores e matrculas que devem ser usadas pelo sistema computacional. A seguir so apresentadas as referidas chas cadastrais:
24
Banco de Dados II
Com base nessas chas cadastrais j se pode ter uma idia dos dados que sero cadastrados no sistema, porm necessrio que se converta esses dados coletados para forma de um modelo de entidade relacional - MER. Pelo modelo de entidade relacional ser possvel estipular os campos obrigatrios, chaves primrias e estrangeiras do banco de dados que dever ser implementado.
Lembre-se que o que define o relacionamento entre tabelas de um banco de dados a necessidade de o dado de uma determinada tabela existir obrigatoriamente em outra tabela. Dessa forma, evitase a redundncia dos dados cadastrados.
Em uma viso bem macro, podemos modelar o problema como sendo a integrao de 3 tabelas: Alunos, Matrculas e Turmas:
Unidade 1
25
No modelo inicial j se destaca uma propriedade importante, pois para que seja feita uma matrcula necessrio que o aluno esteja cadastrado na Tabela de Alunos, e que a turma escolhida esteja cadastrada na Tabela de Turmas. Dessa forma, a Tabela de Matrculas uma tabela do tipo associativa, que interliga as tabelas Alunos e Turmas. Veja a seguir o mesmo modelo j com as cardinalidades entre as tabelas:
De acordo com a ltima gura, tem-se as seguintes regras: um aluno s pode fazer matrcula em uma nica turma; uma turma, por sua vez, pode conter N alunos.
26
Banco de Dados II
Com base nos dados levantados, pode-se acrescentar mais uma tabela ao modelo anterior, que a Tabela de Professores:
FIGURA 1.3 - MODELO DE DADOS VISO GERAL COM AS CARDINALIDADES E A TABELA DE PROFESSORES
Note que a Tabela de Professores no se relaciona com alunos e nem com matrculas, porm, essa tabela de professores deve se relacionar com a Tabela de Turmas, pois dessa forma sabe-se quais os professores de determinada turma de aula. O modelo de dados car da seguinte maneira:
H um problema referente modelagem de um banco de dados: no se pode ter um relacionamento N para N entre tabelas. Para solucionar tal problema, ser colocada uma tabela associativa
Unidade 1
27
entre Turmas e Professores, para registrar em qual turma cada professor est locado. Veja como car o modelo de dados:
FIGURA 1.5 - MODELO DE DADOS VISO GERAL COM A TABELA ASSOCIATIVA ALOCAES
Com isso est encerrado o processo de modelagem de dados. Nas prximas sees ser necessrio especicar os campos de cada tabela, criar um script em linguagem SQL que implemente o modelo desenhado com os tipos de dado de cada campo e suas regras de manipulao. Ento, at l.
28
Banco de Dados II
Tabela de Alunos
A Tabela de Alunos representa elmente os dados da sua respectiva cha cadastral.
TABELA 1.4 - TABELA DE ALUNOS COM OS CAMPOS E TIPOS DE DADOS
Unidade 1
29
Tabela de Professores
A Tabela de Professores representa elmente os dados da sua cha cadastral.
TABELA 1.5 - TABELA DE PROFESSORES COM OS CAMPOS E TIPOS DE DADOS
Tabela de Matrculas
A Tabela de Matrculas representa a relao entre o aluno cadastrado na Tabela de Alunos e a turma cadastrada na Tabela de Turmas. Como os dados sero armazenados em um banco de dados, ser utilizado o relacionamento entre as tabelas, por meio das chaves estrangeiras, a m de garantir a integridade dos dados cadastrados.
30
Banco de Dados II
Tabela de Turmas
A Tabela de Turmas no possui uma cha cadastral padro, porm com a anlise do problema pode-se chegar seguinte estrutura:
TABELA 1.7 - TABELA DE TURMAS COM OS CAMPOS E TIPOS DE CAMPOS
Tabela de Alocaes
A Tabela de Alocaes tambm no possui uma cha padro, porm a sua nalidade bem clara, essa tabela representa a relao entre o professor e a turma para qual ele dever lecionar. A sua estrutura car assim:
TABELA 1.8 - TABELA DE ALOCAES COM OS CAMPOS E TIPOS DE CAMPOS
Unidade 1
31
Com isso, o modelo de dados est composto por todas as tabelas, com seus respectivos campos e tipos de campos. Veja a seguir o modelo de dados completo:
Esse modelo uma representao grca, para visualizao e interpretao das regras do banco de dados que ser criado.
32
Banco de Dados II
O prximo passo converter esse modelo para um conjunto de comandos de denio de dados da linguagem SQL (Structure Query Language), chamados de script SQL.
Unidade 1
33
Com base nesse script, a estrutura da tabela de alunos possui as seguintes regras:
TABELA 1.9 - REGRAS DA TABELA DE ALUNOS
34
Banco de Dados II
A tabela anterior representa o tipo de cada coluna, o seu nome, se a mesma obrigatria e se chave primria.
Com base neste script, a estrutura da Tabela de Professores possui as seguintes regras:
TABELA 1.10 - REGRAS DA TABELA DE PROFESSORES
Unidade 1
35
Com base nesse script, a estrutura da Tabela de Turmas possui as seguintes regras:
TABELA 1.11 - REGRAS DA TABELA DE TURMAS
36
Banco de Dados II
Com base neste script, a estrutura da Tabela de Matrculas possui as seguintes regras:
TABELA 1.12 - REGRAS DA TABELA DE MATRCULAS
Com base nesse script, a estrutura da Tabela de Alocaes possui as seguintes regras:
TABELA 1.13 - REGRAS DA TABELA DE ALOCAES
#-- Script de Criao das Tabelas #-- Remove as Tabelas DROP TABLE IF EXISTS ALOCACOES; DROP TABLE IF EXISTS MATRICULAS; DROP TABLE IF EXISTS ALUNOS; DROP TABLE IF EXISTS TURMAS; DROP TABLE IF EXISTS PROFESSORES;
SEGUE
Unidade 1
37
#-- Criar a Tabela de Alunos CREATE TABLE ALUNOS ( Matricula Nome Data_Nascimento Idade CPF RG_Identidade Nome_Pai Nome_Mae Endereco Numero Cidade Estado Bairro Telefone Celular Chamarpor Alergia Grupo_Sangue Doador PRIMARY KEY ); #-- Criar a Tabela de Professores CREATE TABLE PROFESSORES Codigo Nome Data_Nascimento Idade CPF RG_Identidade CTPS Graduacao Estado_Civil Filhos Endereco Numero Cidade Bairro Estado Telefone Celular Grupo_Sangue Doador PRIMARY KEY ( Codigo ) ); ( Int(4) NOT NULL, Varchar(40) NOT NULL, Date NOT NULL , Int(4) NOT NULL, Varchar(14) NOT NULL , Varchar(20) NOT NULL, Varchar(20) NOT NULL, Varchar(30) NOT NULL, Varchar(25) NOT NULL, Int(4) NOT NULL, Varchar(50) NOT NULL , Int(4) NOT NULL, Varchar(35) NOT NULL, Varchar(30) NOT NULL , Char(2) NOT NULL, Varchar(25) NOT NULL, Varchar(25), Varchar(10), Int(4), Int(11) NOT NULL, Varchar(40) NOT NULL, Date NOT NULL, Int(4) NOT NULL, Varchar(14), Varchar(20), Varchar(40) NOT NULL, Varchar(40) NOT NULL, Varchar(50) NOT NULL, Int(4) NOT NULL, Varchar(35) NOT NULL, Char(2) NOT NULL, Varchar(40) NOT NULL, Varchar(30), Varchar(30), Varchar(30), Varchar(30), Varchar(10), Int(4), ( Matricula )
38
Banco de Dados II
#-- Criar a Tabela de Turmas CREATE TABLE TURMAS ( Codigo_Turma Int(4) NOT NULL, Descricao Varchar(30) NOT NULL, Grau Int(4) NOT NULL, Serie Int(4) NOT NULL, Turno Char(1) NOT NULL, PRIMARY KEY ( Codigo_Turma ) ); #-- Criar a Tabela de Matrculas CREATE TABLE MATRICULAS ( Mat_Aluno Int(11) NOT NULL, Cod_Turma Int(4) NOT NULL, Valor Float(9,2) NOT NULL , Data Date NOT NULL, PRIMARY KEY (Mat_Aluno,Cod_Turma), FOREIGN KEY(MAT_ALUNO) REFERENCES ALUNOS(MATRICULA), FOREIGN KEY(COD_TURMA) REFERENCES TURMAS(CODIGO_TURMA) ); #-- Criar a Tabela de Alocaes CREATE TABLE ALOCACOES ( Codigo_Professor_Aloca Int(4) NOT NULL , Codigo_Turma_Aloca Int(4) NOT NULL , PRIMARY KEY ( Codigo_Professor_Aloca,Codigo_Turma_Aloca ), FOREIGN KEY (CODIGO_PROFESSOR_ALOCA) REFERENCES PROFESSORES(CODIGO), FOREIGN KEY (CODIGO_TURMA_ALOCA) REFERENCES TURMAS(CODIGO_TURMA) );
Bem, com isso voc tem a modelagem do banco de dados em um formato que pode ser lido pela ferramenta de banco de dados que ser utilizado para implementao do sistema e armazenamento dos dados. Essa uma entre vrias etapas para se criar um software. Na prxima unidade voc vai para etapa de preparao, na qual sero especicadas a linguagem de programao, a ferramenta de banco de dados e as funcionalidades do sistema. At a prxima unidade!
Unidade 1
39
Sntese
Voc pde estudar nesta unidade que a tarefa de desenvolver software requer muita anlise por parte do prossional. A principal diculdade transformar um problema em uma soluo computacional que atenda as necessidades do cliente e seus usurios. As tarefas de especicao do problema possuem uma cronologia e ordem formal, a inverso dessas tarefas pode resultar em mais tempo de desenvolvimento e conseqentemente, em maior custo. Na maioria das vezes, um sistema computacional est agregado a uma soluo de banco de dados, responsvel por armazenar e garantir a integridade dos dados. Para se chegar a um modelo de dados ideal e que atenda as necessidades do usurio importantssimo um levantamento de dados criterioso e organizado. A representao do modelo de dados feita pela modelagem de entidade e relacionamentos, que uma representao grca para maior compreenso da soluo que est sendo adotada. Para transformar esta soluo em uma ferramenta de banco de dados, necessria a criao de um conjunto de comandos em SQL que construa e altere as estruturas modeladas, e esse conjunto de comandos chamado de script. Um script pode mudar de acordo com a ferramenta computacional que se deseja adotar, por algum novo comando que seja necessrio, porm a modelagem de entidade e relacionamento nica, independente da ferramenta computacional e a principal referncia para o sistema que ser implementado.
40
Banco de Dados II
Atividades de auto-avaliao
Efetue as atividades de auto-avaliao e, a seguir, acompanhe as respostas e comentrios a respeito. Para melhor aproveitamento do seu estudo, realize a conferncia de suas respostas somente depois de fazer as atividades propostas. Leia com ateno os enunciados e realize, a seguir, as atividades. 1. A maioria das profisses exige que o especialista seja formado em um curso de graduao, como mdicos e advogados. Na rea de desenvolvimento de softwares no h exigncia de graduao para que um profissional execute as suas atividades. Qual a sua opinio sobre essa questo?
2. Quando se desenvolve um produto, como uma cadeira, uma casa, etc., durante o processo de criao possvel apresent-lo ao cliente, para seu acompanhamento. Mas, no caso de desenvolvimento de softwares no h um produto palpvel para ser apresentado. Como agir em uma situao como essa?
Unidade 1
41
Saiba mais
Para aprofundar as questes abordadas nesta unidade, voc poder pesquisar em: CHEN, Peter. Modelagem de dados: a abordagem entidade-relacionamento para projeto lgico. So Paulo: Makron Books, 1990. DATE, C J. Bancos de dados: fundamentos. Rio de Janeiro: Campus, 1985. . Introduo a sistema de banco de dados. 8. ed. Rio de Janeiro: Campus, 1990. FILHO,Trajano Leme. Metodologia de desenvolvimento de sistema.So Paulo: Axcel, 2003.
42
UNIDADE 2
Sees de estudo
Seo 1 Critrios para escolha da ferramenta de banco
de dados.
Seo 2 Carregando o MySQL. Seo 3 Testando a ferramenta de banco de dados. Seo 4 Executando o aplicativo de banco de dados. Seo 5 Comandos bsicos do MySQL. Seo 6 Convertendo o script em um banco de dados.
44
Banco de Dados II
Independentemente das caractersticas do produto, o mais importante garantir que a ferramenta escolhida atenda as necessidades do cliente e garanta a integridade dos dados. A escolha da ferramenta deve se adequar aos resultados da anlise do sistema. De forma resumida, uma ferramenta de banco de dados deve ter as seguintes caractersticas: aceitar como linguagem de manipulao e de denio de dados o SQL padro ANSI, que internacional; permitir a denio de regras de integridade, principalmente de integridade referencial, as chaves estrangeiras; possibilitar portabilidade em diferentes plataformas como: Linux e Windows; trabalhar na arquitetura cliente-servidor; disponibilizar mecanismos que permitam manter o acesso ao banco de dados mesmo em caso de falha no dispositivo de armazenamento. Cada ferramenta tem sua verso e a cada nova verso novos recursos, que facilitam a criao do banco de dados, so adicionados. Atualmente, uma caracterstica muito importante tem sido agregada a essas ferramentas, a disponibilidade sem custo algum - as chamadas ferramentas de cdigo aberto. Entretanto, tal gratuidade no pode ser a principal razo para se escolher a ferramenta desejada. Retomemos o projeto da escola Sabe Tudo. Para avaliar a ferramenta que ser utilizada nesse projeto, um fator importante dever ser considerado, a necessidade de se criar um produto de baixo custo. Desta forma, o projeto utilizar uma ferramenta de cdigo aberto, chamada MySQL.
Unidade 2
45
Nas prximas sees, voc far o acesso ferramenta MySQL pela internet, baixar essa ferramenta e executar o processo de instalao e congurao da mesma.
Baixando o MySQL
1. Acesse o endereo de internet: <www.mysql.com>. 2. Com a pgina carregada, acesse o link: Developer Zone. Este link especco para os desenvolvedores de softwares com acesso a banco de dados; 3. A verso mais atual da ferramenta MySQL 5.1, porm ser utilizada a verso 5.0 por ser uma verso mais estvel e de tamanho menor para ser baixado pela internet. Para iniciar o processo clique no link MySQL 5.0, que est localizado logo no incio da pgina.
46
Banco de Dados II
4. Na pgina que se abre, procure pela verso para o sistema operacional Windows. Localizando o link para essa verso, clique na palavra download do arquivo Windows Essentials para iniciar o processo de download. Veja a imagem a seguir:
Unidade 2
47
Agora que o arquivo j foi baixado para sua mquina, a prxima tarefa instalar o programa.
2. D um duplo clique no arquivo mysql-essential-5.0.18win32 para iniciar a instalao. Na janela que se abrir clique no boto Executar.
48
Banco de Dados II
Veja abaixo:
Com isso, o processo de instalao se iniciar e lhe sero apresentadas algumas telas de congurao.
Unidade 2
49
50
Banco de Dados II
Bem, com mais essa etapa o banco de dados j esta instalado, faltando apenas a congurao do nome de usurio e senha de acesso.
Unidade 2
51
52
Banco de Dados II
Unidade 2
53
54
Banco de Dados II
9. Congurao de senha de acesso na caixa New root password edite a senha virtual. Na caixa Conrm repita a palavra virtual. Essa ser a senha de acesso ao MySQL. Aps editar a palavra virtual, clique no boto Next.
Unidade 2
55
10. Tela de nalizao clique no boto Execute para realizar as conguraes e por m clique em Finish para encerrar todo o processo de congurao.
56
Banco de Dados II
A sua interao com a ferramenta MySQL ser feita por meio do programa MySQL Command Line Cliente, que representa o editor de comando em SQL que sero interpretados pelo sistema de gerenciamento do banco de dados. Para acessar esse aplicativo basta clicar na opo MySQL Command Line Cliente do grupo de programas do MySQL. Veja a tela que aparecer:
Nesse caso, necessrio que voc informe a senha utilizada na instalao do programa para poder acessar o aplicativo. Para padronizar a instalao, solicitei que fosse informada a senha virtual, sendo assim, basta voc escrever virtual e pressionar a tecla enter. A tela de entrada ao MySQL Command Line Cliente pode ser vista a seguir.
Unidade 2
57
2. Clique com boto da direita sobre a opo MySQL Command Line Client para que aparea o seguinte menu suspenso:
58
Banco de Dados II
4. Com o mouse, arraste o atalho MySQL Command Line Client (2) para rea de trabalho:
Muito bem, pelo atalho ca mais prtico para voc executar o aplicativo MySQL Command Line Client, que ser usado vrias vezes nesta unidade e em outras atividades que sero executadas mais frente.
Lembre-se que sempre que voc executar a chamada do aplicativo acima, ser solicitado a senha de acesso, que foi padronizada como virtual.
Para comear a interagir com esse aplicativo, clique no atalho criado anteriormente e, na tela que se abre, digite a senha de acesso e pressione a tecla Enter. No se assuste com esta tela preta, sem graa. Na verdade, essa tela representa o editor de comandos do MySQL e ser muito utilizada por voc. Esse editor formado por um cursor que indica a linha atual de edio, representada pelo smbolo mysql>. A partir deste cursor voc escrever o comando que deseja executar, seguido de um ponto e vrgula (;). Para executar o comando, basta pressionar a tecla Enter.
Unidade 2
59
60
Banco de Dados II
Lembre-se que a tarefa de programar requer um pouco de pacincia e muita concentrao, principalmente quando o resultado esperado no alcanado. Mas, o mais importante que estou nesta caminhada com voc. No primeiro comando, voc ir vericar qual o usurio que est conectado ao banco de dados. Essa a forma pela qual o sistema de gerenciamento de banco de dados identica o usurio junto s suas funcionalidades o que ele ir disponibiliza.
Os comandos podem ser escritos em maisculas ou minsculas, sem distino pelo aplicativo MySQL.
Unidade 2
61
Na instalao do MySQL, alguns DataBases j so instalados. Para vericar quais so esses bancos de dados, digite o comando: Show Databases; e pressione a tecla Enter. O resultado deve ser:
Comando Use
O acesso ao database realizado por meio do comando Use seguido do nome do DataBase, ou seja, a sintaxe do comando :
Use Nome do DataBase ; <enter>
Veja a seguir o comando para acesso ao DataBase chamado mysql: Use MySQL;
62
Banco de Dados II
Veja a seguir.
Unidade 2
63
Para criar um DataBase deve-se executar o comando create DataBase, com a seguinte sintaxe:
create DataBase Nome_do_DataBase;
64
Banco de Dados II
Para exemplicar, vou criar o DataBase chamado SabeTudo, que dever representar o banco de dados para o software da escola Sabe Tudo, proposto na unidade anterior. Veja como simples a sintaxe:
Para listar os DataBases existentes, voc pode executar o comando show DataBases:
Voc pode notar que foi acrescentado o DataBase chamado sabetudo lista de DataBases do MySQL. A partir deste momento, todas as regras e tabelas sero criadas dentro do DataBase chamado SabeTudo, como forma de organizao das informaes referentes ao software que ser implementado. Vale salientar que o nome do DataBase poderia ser qualquer um, porm a escolha pelo nome SabeTudo tem a nalidade de associar o banco de dados ao problema que ser solucionado posteriormente. Como o DataBase criado, o prximo passo criar as tabelas relacionais que faro parte deste banco de dados. A criao das tabelas se baseia nos comandos de denio de dados do SQL, que so basicamente: Create Table, Drop Table e Alter Table.
Unidade 2
65
Antes de criar este conjunto de tabelas, vou reapresentar o modelo que foi criado na unidade anterior, que inclusive foi transformado em um script de banco de dados. Veja novamente o modelo proposto para o software da escola SabeTudo:
Assim como o modelo de dados proposto deve ser relembrado, importante relembrar tambm o script de banco de dados que cria sicamente esse modelo. Esse script possui a sintaxe de criao de cada uma das tabelas, com os nomes e tipos de cada campo, com suas regras de chave primria e chave estrangeira.
66
Banco de Dados II
A principal nalidade do script ter, em um nico arquivo, os comandos que criam as tabelas de um DataBase, de forma organizada e simples. Veja o script de criao das tabelas anteriores:
#-- Script de Criao das Tabelas #-- Remove as Tabelas DROP TABLE IF EXISTS ALOCACOES; DROP TABLE IF EXISTS MATRICULAS; DROP TABLE IF EXISTS ALUNOS; DROP TABLE IF EXISTS TURMAS; DROP TABLE IF EXISTS PROFESSORES; #-- Criar a Tabela de Alunos CREATE TABLE ALUNOS ( Matricula Nome Data_Nascimento Idade CPF RG_Identidade Nome_Pai Nome_Mae Endereco Numero Cidade Estado Bairro Telefone Celular Chamarpor Alergia Grupo_Sangue Doador PRIMARY KEY ); #-- Criar a Tabela de Professores CREATE TABLE PROFESSORES Codigo Nome Data_Nascimento ( Int(4) NOT NULL, Varchar(40) NOT NULL, Date NOT NULL ,
SEGUE
Int(11) NOT NULL, Varchar(40) NOT NULL, Date NOT NULL, Int(4) NOT NULL, Varchar(14), Varchar(20), Varchar(40) NOT NULL, Varchar(40) NOT NULL, Varchar(50) NOT NULL, Int(4) NOT NULL, Varchar(35) NOT NULL, Char(2) NOT NULL, Varchar(40) NOT NULL, Varchar(30), Varchar(30), Varchar(30), Varchar(30), Varchar(10), Int(4), ( Matricula )
Unidade 2
67
Idade CPF RG_Identidade CTPS Graduacao Estado_Civil Filhos Endereco Numero Cidade Bairro Estado Telefone Celular Grupo_Sangue Doador PRIMARY KEY ); #-- Criar a Tabela de Turmas CREATE TABLE TURMAS ( Codigo_Turma Descricao Grau Serie Turno PRIMARY KEY ); #-- Criar a Tabela de Matrculas
Int(4) NOT NULL, Varchar(14) NOT NULL , Varchar(20) NOT NULL, Varchar(20) NOT NULL, Varchar(30) NOT NULL, Varchar(25) NOT NULL, Int(4) NOT NULL, Varchar(50) NOT NULL , Int(4) NOT NULL, Varchar(35) NOT NULL, Varchar(30) NOT NULL , Char(2) NOT NULL, Varchar(25) NOT NULL, Varchar(25), Varchar(10), Int(4), ( Codigo )
Int(4) NOT NULL, Varchar(30) NOT NULL, Int(4) NOT NULL, Int(4) NOT NULL, Char(1) NOT NULL, ( Codigo_Turma )
CREATE TABLE MATRICULAS ( Mat_Aluno Int(11) NOT NULL, Cod_Turma Int(4) NOT NULL, Valor Float(9,2) NOT NULL , Data Date NOT NULL, PRIMARY KEY (Mat_Aluno,Cod_Turma), FOREIGN KEY(MAT_ALUNO) REFERENCES ALUNOS(MATRICULA), FOREIGN KEY(COD_TURMA) REFERENCES TURMAS(CODIGO_TURMA) );
68
Banco de Dados II
#-- Criar a Tabela de Alocaes CREATE TABLE ALOCACOES ( Codigo_Professor_Aloca Int(4) NOT NULL , Codigo_Turma_Aloca Int(4) NOT NULL , PRIMARY KEY ( Codigo_Professor_Aloca,Codigo_Turma_Aloca ), FOREIGN KEY (CODIGO_PROFESSOR_ALOCA) REFERENCES PROFESSORES(CODIGO), FOREIGN KEY (CODIGO_TURMA_ALOCA) REFERENCES TURMAS(CODIGO_ TURMA) );
Para converter esse script em um banco de dados, voc deve executar os passos seguintes. 1. Em um editor de texto, como bloco de notas do Windows, edite o script criado na unidade anterior, sem alterao alguma.
Unidade 2
69
2. Clique na opo para salvar o arquivo. Redirecione o salvamento para pasta: C: \Arquivos de programas\MySQL\MySQL Server 5.0\bin. No formulrio Salvar Como, na caixa de edio Nome do arquivo edite ScriptSabeTudo.sql e na opo Salvar como Tipo selecione a opo Todos os Arquivos (*.*). Veja a gura a seguir:
70
Banco de Dados II
3. Com o script salvo, o prximo passo execut-lo dentro do MySQL. Para isso, carregue o programa MySQL Command Line Client. Caso o mesmo no esteja aberto. 4. Pelo comando Use, entre no banco de dados SabeTudo, executando o comando use sabetudo.
5. Para executar o script, utilize o comando Source, da seguinte forma: Source ScriptSabetudo.Sql;
6. Caso algum erro acontea, abra o arquivo ScriptSabeTudo. sql, corrija o erro, que normalmente de escrita, salve a alterao e execute novamente o comando source ScriptSabeTudo.Sql; 7. Para vericar se as tabelas foram criadas, execute o comando: show tables;
Unidade 2
71
8. Para vericar a estrutura das tabelas criadas, recorra ao comando Describe, cuja sintaxe : desc nome_da_tabela. Para ver, por exemplo, a estrutura da tabela de alunos o comando : Desc alunos;
Com isso, voc j tem um bom caminho percorrido. O banco de dados est modelado e com as tabelas criadas sicamente. A prxima tarefa preparar o ambiente de programao que ser responsvel por implementar o software que far conexo com o banco de dados criado nessa etapa. Pronto para mais essa tarefa? Ento, at a prxima unidade!
Sntese
Voc estudou nesta unidade todo o processo de download e instalao de uma ferramenta computacional de banco de dados. Por se tratar de uma atividade com vrias tarefas envolvidas, pode parecer complicado. Entretanto, medida que o processo passe a ser executado vrias vezes, tende a se tornar simples e objetivo. A instalao de uma ferramenta de banco de dados fundamental para a implementao de um sistema com armazenamento de dados, pois representar, sicamente no
72
Banco de Dados II
computador, toda a anlise do problema transformada em tabelas relacionais. Cada ferramenta de banco de dados possui um conjunto de comandos nicos, entretanto, a maioria deles deve atender um padro internacional de comandos, chamados de SQL-ANSI. Esses comandos so independentes do sistema de gerenciamento de banco de dados utilizado. A criao de um banco de dados se baseia nos comandos de denio de dados da SQL, que so, basicamente, Create Table, Drop Table e Alter Table. Como esses comandos podem sofrer alteraes a partir do modelo de dados especicado, ou alteraes no prprio andamento do projeto, o ideal converter as regras de criao do modelo de dados em um script SQL. A forma de carregar esse script na ferramenta de banco de dados pode mudar de um modelo para outro, porm a grande maioria deles possui essa funcionalidade. Uma ferramenta de banco de dados de baseia em dois grupos de comandos: comandos proprietrios seguem a sintaxe da ferramenta ; e comandos ANSI SQL seguem um padro internacional. Esses dois grupos abrangem uma gama muito grande de comandos, no entanto, no h necessidade de decor-los, uma vez que ao serem utilizados, se tornaro de fcil compreenso e utilizao.
Unidade 2
73
Atividades de auto-avaliao
1. A utilizao de script para criao de banco de dados no obrigatria, no entanto, ele muito empregado pelos profissionais de banco de dados. Nesse caso, o script deve possuir algumas vantagens, voc poderia citar algumas?
2. A alterao do modelo de dados deve gerar, conseqentemente, uma alterao nos script de criao do mesmo, pois, caso contrrio, o modelo no representar fielmente o banco de dados utilizado. Essa afirmao est correta? Justifique a sua resposta.
3. O MySQL permite a execuo de um script de criao de tabelas de um banco de dados sem que tenha sido especificado antes qual o DataBase usado? Caso isso no seja possvel, como garantir que as tabelas sempre sero criadas no DataBase correto ao se executar o script?
74
Banco de Dados II
Saiba mais
Para aprofundar as questes abordadas nesta unidade, voc poder pesquisar em: NIEDERAUER, Juliano. PRATES, Rubens. MySQL Guia de referncia rpida. So Paulo: NovaTec, 2005. RANGEL, Alexandre. MySQL - projeto, modelagem e desenvolvimento. So Paulo: Alta Books, 2005. SUHRING, Steve. MySQL A Bblia. Rio de Janeiro: Campus, 2002. E consultando os sites:
http://www.mysql.com http://www.mysqlbrasil.com.br
Unidade 2
75
UNIDADE 3
Sees de estudo
Seo 1 Apresentando o Java. Seo 2 Instalando o Java.
78
Banco de Dados II
Uma linguagem de programao uma metodologia de representao das instrues que devero ser executadas por um computador, obedecendo as suas regras de sintaxe e semntica. Essas instrues so normalmente chamadas de comandos da linguagem de programao. A sintaxe, de modo suscinto, significa a escrita de uma palavra e a semntica o significado da palavra.
O principal objetivo de uma linguagem de programao especicar de forma precisa como o computador dever : processar os dados informados por meio das operaes de entrada; armazenar os dados; apresentar os dados processados pelas operaes de sada.
A linguagem de programao apenas representa a ordem de processamento do computador a partir da lgica especicada pelo programador. Se a lgica estiver errada, o computador a executar da mesma forma, sem avaliar se o resultado esperado est dentro ou no do esperado. Sendo assim, um bom programador deve ter uma tima lgica de programao, sem se prender linguagem de programao utilizada, pois a linguagem uma formalizao da sua forma de solucionar o problema.
Unidade 3
79
J o inverso no verdadeiro, um bom programador que domine vrias linguagens de programao no ter sucesso nas suas implementaes se a sua lgica de programao no estiver bem amadurecida.
O que o JAVA?
O Java uma linguagem de programao totalmente orientada a objetos, fabricada e distribuda pela Sun MicroSystems. Na dcada de 90, a linguagem Java foi projetada para ser usada na rea de eletrnica, principalmente no setor de eletrodomsticos, como concorrente da linguagem C. Mas, foi com a popularizao da internet que essa linguagem ganhou mercado. A principal caracterstica da linguagem Java a sua portabilidade. Um programa implementado em Java pode ser executado em qualquer plataforma, seja ela Windows ou Linux, sem alteraes. Para que essa portabilidade seja possvel, o Java funciona sob uma arquitetura chamada Java Virtual Machine, ou simplesmente JVM.
80
Banco de Dados II
Dessa forma, o trabalho de executar o aplicativo Java criado realizado pela mquina virtual usando os recursos do computador no qual a mquina est instalada. Veja o diagrama a seguir:
GRFICO 3.11 - FUNCIONAMENTO DA LINGUAGEM JAVA
Unidade 3
81
Para esta disciplina ser adotada a plataforma J2SE, na verso 5.0, por atender todas as necessidades do projeto da escola SabeTudo. Nas prximas sees voc ver como instalar e congurar o Java no seu computador.
82
Banco de Dados II
Na nova pgina que carregou, marque o item Required como Accept e depois clique na opo Windows O Line Installation Multi Language. Veja a imagem a seguir que representa esse processo:
Unidade 3
83
Aps instalar a ferramenta, necessrio realizar algumas conguraes no Windows. Essas conguraes recebem o nome de variveis de ambiente do sistema operacional, e so fundamentais para o perfeito funcionamento do Java. Com essas variveis de ambiente ajustadas, ser possvel voc executar o Java e a sua mquina virtual de qualquer diretrio do seu computador.
O processo simples. Primeiro voc precisa chegar ao formulrio de congurao das variveis de ambiente para depois adicionlas ou alter-las. Para chegar a esse formulrio, siga os passos seguintes: 1. Clique com o boto da direita no cone Meu Computador e selecione a opo Propriedades:
2. Na janela que se abre, selecione a aba chamada Avanado e clique no boto Variveis de Ambiente:
84
Banco de Dados II
3. Uma nova janela ser aberta para a alterao ou incluso das variveis de ambiente CLASSPATH e PATH:
Unidade 3
85
Comece pela varivel CLASSPATH, da seguinte forma: No quadro Variveis do Sistema, na parte inferior do formulrio de Variveis de Ambiente, procure e selecione a palavra CLASSPATH. Caso exista esta palavra, e voc a tenha selecionado, clique no boto Editar:
No campo Valor da Varivel apenas inclua no nal da linha os smbolos: ; (ponto e vrgula) e . (ponto) e clique no boto OK. Dessa forma o campo Valor da Varivel car preenchido da seguinte forma: Qualquer coisa;. Caso a palavra CLASSPATH ainda no exista, clique no boto Incluir. A mesma janela acima ser apresentada, porm os campos Nome da Varivel e Valor da Varivel estaro em branco. No campo Nome da Varivel escreva CLASSPATH e no campo Valor da Varivel insira apenas o smbolo . (ponto) e clique no boto OK.
86
Banco de Dados II
Para nalizar, voc precisa congurar a varivel PATH. Para isso, procure na lista de Variveis do Sistema a palavra PATH e caso seja encontrada, selecione-a. Aps, clique no boto Editar:
Antes de editar o valor do campo Valor da Varivel, verique no Windows Explorer qual o caminho que o Java foi instalado. Por padro, o Java deve ter sido instalado na pasta: C:\Arquivos de programas\Java\jdk1.5.0_06. Os arquivos executveis do Java cam localizados na subpasta chamada Bin. So os arquivos javac.exe e java.exe. Esses arquivos devem ser localizados automaticamente pelo Windows na execuo do Java. Para que isso ocorra, preciso que voc insira no campo Valor da Varivel um ponto e vrgula (;) seguido do caminho: C:\Arquivos de programas\Java\jdk1.5.0_06\bin. Depois clique em OK. Caso a varivel PATH no tenha sido localizada, clique no boto Nova e inclua no campo Nome da Varivel a palavra PATH e no campo Valor da Varivel o caminho: C:\Arquivos de programas\ Java\jdk1.5.0_06\bin. Depois clique em OK. Para nalizar, clique no boto OK da janela de Variveis de Ambiente, voltando janela de propriedades do sistema. Clique novamente no boto OK para fechar esse ltimo formulrio.
Unidade 3
87
Para vericar se as alteraes das variveis de ambiente foram feitas de forma correta, voc pode executar o Java de qualquer diretrio do Windows, da seguinte forma: clique no boto Iniciar do Windows; clique na opo Executar; no campo abrir escreva CMD e clique no boto OK. Ser aberta uma janela com o prompt do Windows;
88
Banco de Dados II
O comando Javac faz a compilao de um programa em Java. Quando o comando pode ser executado, isto significa que todas as configuraes esto corretas.
Para vericar a verso do Java instalado, digite no prompt do Windows a linha de comando: java version e pressione a tecla Enter:
Parabns! Com isso voc obtm a mais uma vitria! Agora voc j possui o ambiente de banco de dados instalado e configurado, bem como o ambiente de programao, o Java.
A base para a implementao do projeto para escola SabeTudo est quase completa, faltando apenas a conexo entre essas duas ferramentas, mas isso assunto para a prxima unidade.
Unidade 3
89
Sntese
Nesta unidade voc estudou que a lgica de programao a base de qualquer linguagem de programao. A linguagem de programao uma formatao de comandos que sero executados pelo computador, seguindo as regras de sintaxe e semntica. Ela possui duas importantes propriedades: totalmente orientada a objetos e gratuita. Voc pde ainda interagir com todo o processo de baixar, instalar e congurar o ambiente de programao Java.
Atividades de auto-avaliao
1. O Java uma linguagem de programao atual, moderna e muito utilizada. O profissional que um especialista nessa linguagem de programao possui grandes chances de prosperar nesse mercado de trabalho. Sendo assim, o especialista nesta linguagem no precisa se preocupar, pois estar sempre garantido no mercado, dado que muito difcil uma linguagem de programao deixar de ser usada, sobretudo a linguagem Java. Essa afirmao est correta? Qual a sua opinio?
90
Banco de Dados II
Saiba mais
Para aprofundar as questes abordadas nesta unidade, voc poder pesquisar em: DEITEL, H.M.;DEITEL,P.J. Java: como programar. 6 ed. Ed. Pearson, 2005. HORSTMANN, Cay S. Big Java. Porto Alegre: Bookman, 2004.
Unidade 3
91
UNIDADE 4
Sees de estudo
Seo 1 Driver de conexo ODBC. Seo 2 Driver de conexo JDBC. Seo 3 Criando uma Fonte de Dados.
94
Banco de Dados II
No caso da computao este interpretador recebe o nome de driver de conexo. Como cada ferramenta de banco de dados possui particularidades no seu funcionamento, normalmente o driver de conexo distribudo pelo prprio fabricante do banco de dados.
No caso do sistema operacional Windows, h um conjunto de drivers para conectividade a banco de dados, chamado de Open DataBase Connectivity (Padro Aberto de Conectividade), ou simplesmente ODBC.
A maioria dos drivers de conexo disponveis no ODBC para bancos de dados antigos, muitos at deixaram de ser usados, como: Dbase, Clipper. Sendo assim, para a maioria dos bancos de dados atuais necessrio que o usurio instale no seu computador o driver especco para a ferramenta que ele est utilizando. Como o projeto da escola SabeTudo se baseia no banco de dados MySQL e na linguagem de programao Java, preciso que voc instale na sua mquina o driver de conexo ODBC para o MySQL.
Para isso, acesse o link a seguir:
<http://dev.mysql.com/get/Downloads/MyODBC3/mysqlconnector-odbc-3.51.12-win32.zip/from/http://www.linorg.usp. br/mysql/>
Unidade 4
95
Na tela que abrir, clique no boto Salvar e direcione o arquivo para uma pasta de sua preferncia. Agora que voc baixou o arquivo preciso instal-lo. Para isso, execute os passos seguintes: 1. Na pasta em que se encontra o arquivo baixado anteriormente, d um duplo clique no arquivo para execut-lo. 2. Na tela do Winzip que se abriu, d um clique no arquivo chamado Setup.exe para iniciar a instalao. Surgir uma tela, como a imagem a seguir:
3. Clique no boto Next e repita a mesma tarefa para todas as telas que seguem, at que aparea a seguinte tela:
96
Banco de Dados II
4. Clique no boto Install e aguarde o nal da instalao. Assim que a instalao terminar, clique no boto Finish para encerrar todo o processo. Pronto, o driver ODBC est instalado. A partir desse momento o sistema operacional Windows j reconhece o banco de dados MySQL como uma fonte de dados. Na prxima seo, voc precisar criar uma ponte entre esse driver e o driver especco para Java, chamado de JDBC. At l!
Unidade 4
97
O uso do JDBC apresenta algumas vantagens para a aplicao Java: maior portabilidade, facilidade de congurao e padronizao.
Com base na ferramenta que ser utilizada como banco de dados, acesse o site do fabricante e procure na rea de download pelo driver de conexo JDBC. Para facilitar, acesse o link: <http://dev.mysql.com/downloads/ connector/j/3.1.html>, para baixar o JDBC para MySQL. Esse driver ser usado por voc para conexo do software para a escola SabeTudo. Veja o site de download desse driver de conexo:
98
Banco de Dados II
Para baixar o arquivo, clique no link Pick a Mirror, conforme a imagem a seguir:
Na pgina que se abre, procure um Mirror do Brasil e clique na palavra Http, conforme a imagem a seguir:
Na janela que se abre, clique no boto Salvar e direcione o salvamento do arquivo para um diretrio de sua escolha.
Unidade 4
99
Esse arquivo no precisa ser instalado, basta apenas que ele seja copiado para o computador. Por enquanto s isso, apenas lembre-se do diretrio no qual voc salvou esse arquivo, pois na hora da implementao do programa ser necessrio informar o caminho ao Java. Como voc j realizou vrias tarefas, no quadro abaixo so apresentados todas as tecnologias que j foram instaladas por voc e a nalidade de cada uma delas, observe:
Quadro 4.1: as tecnologias.
Tecnologia
MySQL
Situao
Instalado e congurado, com a senha de acesso virtual. Instalado e com as variveis de ambiente CLASSPATH e PATH conguradas. Copiado para um diretrio do computador.
Finalidade
Armazenamento dos dados da aplicao para escola SabeTudo. Implementar a aplicao para escola SabeTudo. Conectar o banco de dados MySQL ao aplicativo implementado em JAVA.
Java
JODBC MySQL
Muito bom, com mais essa tarefa voc j est com quase todo ambiente preparado para o desenvolvimento da aplicao. Na prxima seo voc ver como criar uma fonte de dados ODBC, que, basicamente, signica informar ao sistema operacional algumas caractersticas do DataBase que ser acessado no MySQL tais como: Nome do DataBase acessado; Servidor no qual o DataBase est instalado; Nome do usurio administrador e a senha de acesso ao DataBase. Pode parecer complexo, mas voc ver que um processo bem simples.
100
Banco de Dados II
Para criar uma fonte de dados, clique no cone chamado Fontes de Dados (ODBC). Ser apresentada a seguinte janela na tela:
Unidade 4
101
Com o formulrio aberto, clique na aba chamada Fonte de dados de sistema, e depois clique no boto Adicionar. Na janela que se abriu, selecione o driver de conexo chamado MySQL ODBC 3.51 Driver, conforme a prxima gura:
Para nalizar, clique no boto Concluir. Ser aberta uma janela para criao da fonte de dados que ser usada pelo sistema desenvolvido para a escola SabeTudo. Nessa janela edite os seguintes valores:
102
Banco de Dados II
Na caixa de Apelido da Fonte De Dados, escreva AcessoDB. Este ser o nome usado por voc toda vez que quiser se referir a essa fonte de dados. Na caixa Servidor, insira a palavra localhost para identicar o acesso a um banco de dados local. Caso o banco de dados estivesse em outro computador voc informaria o nome ou o IP desse equipamento. Na caixa de Usurio, edite a palavra root, que correspode ao usurio administrador do MySQL. Na caixa de Senha, edite a palavra virtual que foi a senha usada por voc para a instalao do MySQL. Para fechar, selecione na caixa de DataBase o nome SabeTudo, que corresponde ao database criado sicamente no MySQL. Agora s clicar no boto OK. O ambiente est pronto para o seu devido uso. Lembre-se que a partir de agora, sempre que voc se referir fonte de dados AcessoDB, voc est na verdade acessando o DataBase chamado SabeTudo, atravs do usurio root e senha virtual.
Unidade 4
103
Agora s comear a programar, portanto mos ao Java. Mas isso assunto para a prxima unidade!
Sntese
Nesta unidade voc pde estudar o processo de congurao e conexo de um banco de dados com um programa desenvolvido em linguagem Java. Para que a conexo seja realizada necessrio que o computador possua instalado o driver ODBC da ferramenta de banco de dados escolhida. Esse driver funciona como um interpretador entre o sistema e a ferramenta de banco de dados, de forma a permitir a comunicao entre ambos. Um banco de dados possui algumas propriedades, tais como: nome fsico, local de instalao, nome do usurio de acesso irrestrito e senha de acesso. Todas essas informaes podem ser substitudas por um apelido de conexo, que recebe o nome de fonte de dados. Sendo assim, a conexo entre o banco de dados MySQL e o Java precisa das seguintes tecnologias: Driver ODBC, Driver JDBC para o MySQL e uma Fonte de Dados registrada.
104
Banco de Dados II
Atividades de auto-avaliao
1. Uma caracterstica fundamental num driver de conexo com banco de dados a sua transparncia, ou seja, quanto maior for a sua abstrao para o programador, melhor a ferramenta. Sendo assim, pode-se afirmar que o programador e o especialista em banco de dados no precisam saber como funciona o driver, mas sim, saber como tirar o melhor proveito dele. Esta afirmativa correta? Justifique sua resposta.
Unidade 4
105
Saiba mais
Para voc se aprofundar nesses temas, consulte: MECENAS, Ivan. Fundamentos Swing e JDBC: 2 edio. So Pulo: Alta Books, 2005. ANSELMO, Fernando. Tudo que voc queria saber sobre JDBC. So Pulo: Visual Books, 2001.
106
UNIDADE 5
Sees de estudo
Seo 1 Ambiente de desenvolvimento integrado (IDE). Seo 2 Ambiente de desenvolvimento integrado do
JCreator.
108
Banco de Dados II
3. Salve o arquivo com o nome ola.java no diretrio BD2, na pasta Fontes. 4. Agora voc vai compilar este programa. Clique no boto Iniciar, escolha a opo Executar:
6. V para o diretrio em que voc salvou o arquivo ola.java. Algo como: C: \BD2\Fontes.
Unidade 5
109
7. Execute o comando dir para ver se o arquivo ola.java est realmente nessa pasta.
8. Para compilar o programa, execute o comando javac seguido de um espao em branco em seguida o nome do arquivo que voc deseja compilar. Nesse caso, o comando ser: javac ola. java, no esquea de pressionar a tecla Enter aps editar o comando para que o mesmo seja executado.
9. Opa, parece que ao compilar o programa em java, foi encontrado um erro na linha 4, na qual foi esquecido um ponto-e-vrgula. E agora? Simples, voc deve esta com o bloco de notas aberto, certo? Caso por algum motivo voc tenha fechado, execute-o novamente e abra o arquivo ola.java da pasta c:\BD2\Fontes.
110
Banco de Dados II
Na linha 4, desse texto, inclua um ; no nal da linha System.out. println (Testando o Java) e salve novamente o arquivo.
10. Ser preciso, portanto, recompilar o programa, na tela de prompt do Windows que ainda deve estar aberta, caso no esteja, repita os processos 5,6 e 7 descritos aqui. Na tela de prompt execute o comando javac ola.java.
11. Como nenhuma mensagem foi apresentada na tela, a compilao ocorreu com sucesso. Sendo assim, o Java criou um arquivo chamado ola.class, que o resultado da compilao e corresponde ao arquivo que ser executado por voc. Se voc executar o comando dir, ver que agora existem dois arquivos chamados ola, sendo que um possui a extenso .java e outro .class.
Unidade 5
111
12. Para executar o programa (arquivo com extenso .class), na tela de prompt do Windows execute o comando java seguido de um espao em branco e o nome do arquivo com a extenso .class, no caso acima o comando car: java ola.
Muito bem, como eu havia escrito anteriormente, pode parecer complicado, mas no , concorda? um processo bem trabalhoso, sendo que voc precisa trabalhar com a janela do prompt e do bloco de notas abertos simultaneamente. Acredito que seria uma tima notcia se eu te armasse que possvel facilitar em muito todo esse processo. Pois bem, antes de mais nada, feche o bloco de notas e a tela de prompt do Windows para que voc continue seu estudo. O Java possui vrios programas para edio de seu cdigo-fonte com a nalidade de facilitar o processo de edio e compilao. Poderia citar: NetBeans, Eclipse, JEdit, EditPlus e claro o JCreator. Todos eles so muito bons, alguns necessitam de um computador mais moderno, principalmente com boa capacidade de memria Ram e so proprietrios, ou seja, precisam ser comprados. No caso do JCreator, alm de muito fcil de usar, gratuito, ele muito leve, no precisa de um computador muito potente para ser executado. Todos esses facilitadores de implementao para o Java recebem o nome de IDE, que vem de Integrated Development Environment, que traduzido ca Ambiente de Desenvolvimento Integrado. Note que o IDE no uma linguagem de programao em Java, ele um complemento de desenvolvimento em Java. Se voc no tiver o Java instalado na sua mquina, o IDE de nada servir.
112
Banco de Dados II
A principal nalidade do IDE evitar que o usurio tenha que compilar o programa (por meio do comando javac) e executar o programa (por meio do comando java) em interfaces diferentes daquela na qual o programa esta sendo editado.
Basicamente um IDE deve permitir: compilar o programa, depurar os erros do programa e executar o programa.
Mas como baixar e instalar o IDE do JCreator? Isso voc ver na prxima seo.
Para iniciar o processo de download, clique no boto de download da verso JCreator LE V3.50 Freeware.
Unidade 5
113
Na nova pgina, mude o idioma para portugus e cadastre os seus dados. Em seguida, clique no boto enviar.
Ser enviado para o seu e-mail um link para baixar a ferramenta. No demorar para voc receber um e-mail com ttulo: Link para download de JCreator.
Acesse o endereo enviado para o seu e-mail, algo como: <http://www.jcreator.com/download.php?c=4 bf0b74481966caae21ee18d56f628a1>
Salve o arquivo de instalao, chamado Jcrea350.zip, em uma pasta de sua preferncia. Para instalar o programa, acesse a pasta na qual voc salvou o arquivo e d um duplo clique no arquivo Jcrea350.zip:
114
Banco de Dados II
Para realizar a instalao do JCreator por completo, nas telas que se seguem execute as seguintes tarefas: 1. Na tela 1 - clique no boto Next; 2. Na tela 2 - selecione a opo I accept de igreement e clique no boto Next; 3. Na tela 3 - clique no boto Next; 4. Na tela 4 - clique no boto Next; 5. Na tela 5 - clique no boto Next; 6. Na tela 6 clique no boto Install; 7. Para nalizar, clique no boto Finish. Assim que voc clicou no boto Finish, o JCreator abriu uma janela de congurao, semelhante gura a seguir. Nessa janela clique no boto Next para que o JCreator associe as extenses de arquivos que podem ser editados nele.
Unidade 5
115
Voc deve estar lembrado que aqui mesmo eu escrevi que o IDE um ambiente de complemento ao Java, sendo que o mesmo s funciona se o computador possuir um ambiente de programao em Java instalado. Pois bem, na prxima janela o JCreator identica em qual diretrio est instalado o ambiente de programao do Java. Caso o diretrio apresentado no seja o mesmo em que voc instalou o Java, voc pode alter-lo clicando no boto Browse, conforme a imagem que se segue:
116
Banco de Dados II
Aps conrmar ou alterar o diretrio padro do Java, clique no boto Finish para encerrar o processo de congurao. Aps isso, o ambiente do JCreator ser aberto.
Feche a janela de dicas que aparece no centro da tela. Caso voc no queira mais que essa janela seja apresentada a cada vez que voc abrir o JCreator, desmarque a opo Show tips on startup antes de fech-la. O uso desse ambiente muito semelhante maioria dos editores de texto, sendo assim, acredito que voc no ter muitas diculdades em us-lo. Mas isso assunto para prxima seo.
Unidade 5
117
Para avaliar a ferramenta e test-la, convido voc a editar o mesmo programa em Java feito na primeira seo desta unidade, no qual voc usou o bloco de notas e realizou a compilao por meio do prompt do Windows. Primeiro passo, voc dever informar ao JCreator que tipo de projeto deseja implementar. Sendo assim, clique na opo do Menu chamada File e escolha a opo New e em seguida novamente a opo File.
118
Banco de Dados II
Veja:
Selecione a opo Java File e clique no boto Next para a abertura da janela de congurao do nome do arquivo que ser editado.
Unidade 5
119
Primeira coisa, na caixa Location, pelo boto ao lado, direcione a criao do arquivo para o diretrio c: \BD2\Fontes, criado anteriormente por voc. Na caixa Name, edite o nome do arquivo como sendo ola2, depois s clicar no boto Finish. Como resultado, voc ter um campo de edio para o arquivo chamado ola2.
120
Banco de Dados II
Para editar o programa de teste, na rea de edio do CdigoFonte do Arquivo Atual, edite os seguintes comandos:
Agora que voc editou o programa clique no boto de Compile para compil-lo, ou faa por meio da opo de menu chamada Build, opo Compile File.
Opa! O JCreator apresentou um erro de compilao, veja no nal da tela que o JCreator abriu uma nova janela, chamada Task List.
121
A mensagem ; expected indica que na linha 4 do cdigo fonte faltou um ; . Para ir direto ao erro, d um duplo clique na mensagem de erro apresentada na Task List. No cdigo-fonte, inclua no nal da linha 3, System.out. println(Teste do Java Novamente !) um ponto-e-vrgula (;). Compile novamente o programa. Se tudo estiver correto a mensagem apresentada pelo Jcreator ser:
Para executar o programa, clique no boto de Execute ou apenas pressione a tecla F5.
Com mais esse aplicativo instalado, voc est com todo ambiente para o desenvolvimento do programa para escola SabeTudo instalado, congurado e principalmente testado. A partir de agora hora de voc comear a colocar a mo na massa, codicando a soluo por meio da linguagem Java. Preparado para implementao? Ento, at a prxima unidade!
122
Banco de Dados II
Sntese
Nesta unidade voc teve contato com mais um aplicativo essencial para o especialista em banco de dados que deseja implementar um sistema computacional. Talvez seja o aplicativo mais utilizado por um programador, uma vez que o ambiente de desenvolvimento integrado responsvel por receber toda a codicao do programa em desenvolvimento, o que resumidamente se chama de cdigo-fonte. importante que voc se lembre que o IDE no uma linguagem de programao e s funciona se houver um ambiente de programao em Java instalado no computador. O aplicativo IDE um facilitador para o programador, que pode ou no utiliz-lo. Todo processo de compilao e execuo do programa realizado pelo IDE pode ser tambm executado pelo prompt do Windows por meio de comandos especcos, como Javac para compilar o programa e Java para executar o programa. Cabe a voc escolher qual a melhor forma de trabalho.
Unidade 5
123
Atividades de auto-avaliao
1. O uso de ferramentas que auxiliam o profissional de banco de dados com interao com a anlise de sistemas e programao, as chamadas ferramentas CASE, podem facilitar o processo de implementao a tal ponto que no necessite de um especialista?
2. Seria correto afirmar que o processo de compilao de um arquivo em Java est diretamente relacionada ao cdigo-fonte e a execuo diretamente relacionado ao arquivo resultado da compilao chamado de .class?
124
Banco de Dados II
Saiba mais
<http://portaljava.com> <http://jcreator.com> <http://www.guj.com.br> <http://www.eclipse.org/> <http://www.netbeans.org/>
Unidade 5
125
UNIDADE 6
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.
128
Banco de Dados II
Etapa
Analisar Codicar Compilar Depurar Executar
Funo
Converter a soluo em um algoritmo. Escrever a soluo lgica por meio de uma linguagem de programao. Vericar se o cdigo fonte atende as regras de semntica e sintaxe da linguagem utilizada. Corrigir os erros de sintaxe e semntica apresentados pelo processo de compilao. Fazer o programa rodar.
Unidade 6
129
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;}
130
Banco de Dados II
//-- 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.
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.
Unidade 6
131
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 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.
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); } }
132
Banco de Dados II
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:
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.
Unidade 6
133
Linha de Comando
Funo
A importao dessa classe se faz necessria para o uso dos comandos JOptionPane.showInputDialog e JOptionPane.showMessageDialog. A denio do nome da classe deve ser o mesmo nome do arquivo .java. O mtodo construtor deve ter o mesmo nome da classe e deve ser pblico. Os atributos devem ser privados. Os mtodos modicadores, alm de pblicos, no retornam valor algum. Alm disso, sempre recebe um valor como parmetro. 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. 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. Caractere especial para pulo de linha.
import javax.swing.*
public void
public String
Float.parseFloat
\n
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.
134
Banco de Dados II
Unidade 6
135
A conexo com o banco de dados se d pela conexo JDBC, utilizando a classe chamada DriverManager, que poderia ser traduzido para administrador do driver. Essa classe pertence ao pacote java.sql e serve para: criar a conexo com o banco de dados; administrar o driver JDBC usado na conexo; controlar o acesso ao banco de dados via login; controlar a troca de informao entre o driver e a ferramenta de banco de dados. Como o DriverManager pertence ao pacote java.sql, sempre que voc for utiliz-lo dever incluir a linha import java.sql.* no cdigofonte da sua classe, pois esse no um pacote nativo do Java.
Lembre-se: a linguagem Java Case Sensitive, ou seja, maisculo diferente de minsculo. Sendo assim, a classe DriverManager reconhecida, j a classe drivermanager ser um comando no reconhecido pela linguagem.
136
Banco de Dados II
Na qual: Nome da Fonte de Dados: String; Nome do Usurio: String; Senha: String; Os nomes do usurio e da senha de acesso seguem as regras da denio do banco de dados. No caso do banco de dados MySQL instalado por voc, seguindo as denies desta disciplina, possui o usurio chamado root e a senha virtual. O mtodo getConnection() retorna sempre um atributo do tipo connection, que pode ser fechado por meio do mtodo close(). A partir do momento que o banco de dados foi fechado, ele no pode mais ser manipulado, a no ser que uma nova conexo seja aberta por intermdio do getConnection(). Sempre que voc encerrar a aplicao, feche o banco de dados. Os comandos do getConnection() so sempre os mesmos, o que pode mudar so os parmetros de nome da fonte, usurio e senha. Sendo assim, a conexo com banco de dados poderia ser representada por uma classe como:
ConexaoDB - FonteDB: char - Usuario: char - Senha: char + Conectar() : boolean + Fechar(): void + Preparar(): void
Figura 6.3 - DIAGRAMA DA CLASSE DE CONEXO COM O BANCO DE DADOS EM JAVA
Unidade 6
137
O prximo passo montar essa classe. Para isso, abra o JCreator. Clique em File, new File. Escolha o tipo de arquivo Java File. Nomeie o arquivo como ConexaoDB, salve-o na pasta c:\DB2\ Fontes. Edite o seguinte cdigo:
//--Importe de pacotes import javax.swing.*; import java.sql.*; class ConexaoDB{ private String FonteDB,Usuario,Senha; private Connection Conexao; //-- Construtor da Classe com Parmetros public ConexaoDB(String _FonteDB,String _Usuario,String _Senha){ setFonte (_FonteDB); setUsuario(_Usuario); setSenha (_Senha); } //--Modicadores public void setFonte (String _FonteDB) {FonteDB = _FonteDB;} public void setUsuario(String _Usuario) {Usuario = _Usuario;} public void setSenha (String _Senha) {Senha = _Senha;} public void setConexao(Connection _Conexao) {Conexao = _Conexao;} //-- Recuperadores public String getFonte (){return FonteDB;} public String getUsuario(){return Usuario;} public String getSenha (){return Senha;} public Connection getConexao(){return Conexao;} //-- Mtodo para conexo com banco de dados //-- Retorna verdadeiro oufalso para indicar se a conexo foi feita public boolean Conectar(){ boolean sucesso = true; String fonte = jdbc:odbc:+getFonte(); //-- Registro da Fonte de Dados try{ Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); // -- Conexo via ODBC setConexao(DriverManager.getConnection(fonte,getUsuario(),getSenha())); }
138
Banco de Dados II
catch(Exception e){ sucesso = false; } if (sucesso) JOptionPane.showMessageDialog(null, Conectou com Sucesso.); else JOptionPane.showMessageDialog(null, No Conectou.); return sucesso; } //-- Mtodo para fechar a Conexo public void Fechar(){ try{ getConexao().close(); } catch(Exception e){ JOptionPane.showMessageDialog(null,Problema ao Fechar o Banco. ); } } //-- Mtodo para prepara o banco de dados para receber // os comandos em SQL. public Statement PrepararComando(){ try{ return getConexao().createStatement(); } catch (Exception e) { JOptionPane.showMessageDialog(null, Erro de Comando); return null; } } }
Compile o arquivo, e caso apresente algum erro, compare o que voc fez com a listagem apresentada aqui. Vale lembrar que normalmente os problemas podem estar na digitao errada ou em algum smbolo que fora esquecido. Por isso, que tranqilo!
Unidade 6
139
Com base nessa classe, possvel se conectar a qualquer tipo de banco de dados, desde que sejam informados a fonte de dados ODBC, a senha e o usurio do banco de dados. Antes de apresentar mais uma classe, a classe de uso da classe ConexaoDB, vou detalhar o cdigo anterior, para que voc possa dominar a tecnologia de conexo com banco de dados em Java. Veja o quadro a seguir.
Quadro 6.3 - LINHAS DE COMANDO E SUAS FUNCIONALIDADES
Linha de comando Funcionalidade Pacote em Java para os comandos derivados de JOptionPane. Como: JOptionPane.showInputDialog e JOptionPane. showMessageDialog. Pacote Java para manipulao de banco de dados. Nome da classe criada deve ter o mesmo nome do arquivo em Java. Atributos da classe so sempre private. Construtor da classe ConexaoDB, recebendo como parmetro os valores da Fonte de Dados, usurio e senha. O nome da fonte de dados em Java identicada como jdbc:odbc: e em seguida o nome da fonte de dados que se deseja acessar. Carrega o driver que ser usado para conexo com o Java. Nesse caso, ser uma conexo via ODBC. Tenta fazer a conexo com o banco de dados a partir da fonte de dados, usurio e senha fornecidos. O mtodo setConexao() armazena no atributo Conexo o resultado da execuo do comando getConnection. Toda a operao de banco de dados em Java, obrigatoriamente deve ser protegida com tratamento de exceo try.. catch. Fecha o banco de dados. O mtodo getConexao() retorna a conexo que est aberta e o mtodo close() fecha. Por ser uma operao de banco de dados deve ser protegida por try e catch. O tipo de dado Statement representa as operaes que podem ser executadas pelo banco de dados. return getConexao().createStatement(); Sendo assim, o mtodo PrepararComando mantm o banco de dados em modo de espera, aguardando que algum comando em SQL seja passado para execuo.
import javax.swing.*;
import java.sql.*; class ConexaoDB private String FonteDB,Usuario,Senha; private Connection Conexao; public ConexaoDB(String_FonteDB,String _Usuario,String,_Senha) String fonte = jdbc:odbc:+getFonte(); Class.forName(sun.jdbc.odbc. JdbcOdbcDriver); DriverManager.getConnection(fonte,getUs uario(),getSenha())); setConexao(DriverManager.getConnection (fonte,getUsuario(),getSenha())); try{ } catch(Exception e){ }
getConexao().close();
140
Banco de Dados II
O mais importante que essas regras esto prontas, o que pode ser alterado o nome da fonte de dados, nome do usurio e da senha de acesso. Estes valores so passados para classe ConexaoDB no momento em que a mesma instanciada e a conexo ocorre na chamada do mtodo Conectar. Portanto, no h necessidade de reescrever este cdigo de conexo toda vez que for necessrio se conectar a um banco de dados.
Lembre-se que esse cdigo permite a conexo a qualquer tipo de banco de dados por meio da conexo via ODBC, basta que sejam informados os dados da conexo.
Unidade 6
141
O prximo passo executar os comandos SQL a partir da conexo com o banco de dados, mas isso assunto para prxima seo.
142
Banco de Dados II
Comando Insert
Comando em SQL para o cadastramento dos dados nas tabelas, deve obedecer s regras de chaves primrias, chaves estrangeiras e campos obrigatrios. Sua sintaxe:
Insert into Tabela(Nomes do Campos) values (Valores de cada campo);
Comando Update
Comando em SQL para atualizao dos dados nas tabelas, deve obedecer s regras de chaves primrias, estrangeiras e campo obrigatrios. O comando depende de um ltro para a realizao das alteraes, caso seja esquecida a condio de ltro, a alterao valer para todos os registros da tabela. Sua sintaxe:
Update Tabela set Campo = Valor where Condio;
Comando Delete
Comando em SQL para remoo de dados das tabelas, deve obedecer s regras de chaves estrangeiras. O comando depende de um ltro para a realizao das excluses, caso seja esquecida condio de ltro, a o comando exclura todos os dados da tabela. Sua sintaxe:
Delete from where Condio;
Unidade 6
143
Comando Select
Comando em SQL para seleo de dados das tabelas, pode referenciar uma ou vrias tabelas do banco de dados, tendo a opo de ltrar, agrupar e ordenar os dados. Sua sintaxe:
Select Campos from Tabela where Condio Group by Campo Having Condicao Order by Campo;
Com relao ao Java, o que muda com base nesses comandos a forma pela qual o comando ser repassado para o banco de dados. Os comandos que no retornam valores, como Insert, Update e Delete so repassados ao banco de dados pelo mtodo executeUpdate() da classe Statement.
Para remover todos os dados da Tabela de Alunos, os comandos em Java seriam: Connection C = DriverManager.getConnection(fonte,usuario,senha); Statement s = C.createStatement(); s.executeUpdate(Delete from Alunos);
J o comando Select um comando de retorno de dados, sendo assim ele repassado ao banco de dados pelo mtodo executeQuery() da mesma classe Statement. Por exemplo, para listar todos os dados da Tabela de Alunos, os comandos em Java seriam:
Connection C = DriverManager.getConnection(fonte,usuario,senha); Statement s = C.createStatement(); s.executeQuery(Select * from Alunos);
144
Banco de Dados II
Como a diferena entre as duas formas de execuo dos comandos em SQL mnima, o ideal que se crie uma classe para conexo e envio de comandos para o banco dados. Assim como h uma classe que atende as necessidades de conexo com banco de dados, a classe ConexaoDB, necessria tambm uma classe para padronizao do envio de comandos ao banco de dados. Portanto, a partir desse ponto, voc vai comear a montar a classe de comandos em SQL. A estrutura da classe ser a seguinte:
Comandos SQL Con: ConexaoDB Conectou: boolean Resultado SQL: ResultSet + AbrirConexao ( ) + FecharConexao ( ) + ExecutarComando ( )
Figura 6.5 - DIAGRAMA DA CLASSE COMANDOSSQL
SEGUE Unidade 6
145
//--Modicadores public void setConectou (boolean _Conectou){Conectou = _Conectou;} public void setResultadoSQL(ResultSet _Resultado){ResultadoSQL = _Resultado;} public void setConexaoDB(ConexaoDB _ConexaoDB) {Con = _ConexaoDB;} //-- Recuperadores public boolean getConectou(){return Conectou;} public ResultSet getResultadoSQL(){return ResultadoSQL;} public ConexaoDB getConexaoDB() {return Con;}
Este mtodo fundamental para a execuo dos comandos em SQL. Ele abre o banco de dados a partir dos dados de fonte, login e senha.
//-- Usa a classe ConexaoDB para abrir o banco de dados public void AbrirConexao(String _Fonte,String _Usuario,String _Senha){ setConexaoDB(new ConexaoDB(_Fonte,_Usuario,_Senha)); setConectou(getConexaoDB().Conectar()); } //-- Fecha o banco de dados a partir da classe ConexaoDB public void FecharConexao(){ if (getConectou()){ getConexaoDB().Fechar(); } else{ JOptionPane.showMessageDialog(null,Banco de dados no estava aberto); } } //-- Executa o comando em SQL e armazena o resultado do comando quando //for um select. public void ExecutarComando(String ComandoSQL) throws SQLException{ if (getConectou()){ Statement s= getConexaoDB().PrepararComando(); if (ComandoSQL.indexOf(select) != -1 ){ setResultadoSQL(s.executeQuery(ComandoSQL)); } else{ setResultadoSQL(null); s.executeUpdate(ComandoSQL); } } else{ JOptionPane.showMessageDialog(null,Banco de Dados Fechado.); } } }
Fecha a conexo com banco de dados, desde que a abertura do banco tenha ocorrido com sucesso. O mtodo getConectou() informa se o banco esta aberto.
Este mtodo o ponto-chave desta classe. Ao executar um comando em SQL passado como parmetro, a classe verica primeiro se o banco de dados est aberto. Se estiver aberto, o prximo passo vericar se o comando contm a palavra select, se contiver, executado o mtodo executeQuery(), que retorna um ResultSet, seno executa um executeUpdate() que no retorna dados.
Compile a classe mostrada anteriormente e caso seja encontrado algum erro de sintaxe, compare o seu cdigo com o cdigofonte acima. Com essa classe implementada, voc j pode passar qualquer comando em SQL para o banco de dados.
146
Banco de Dados II
No caso dos comandos que no resultam dados, como Insert, Update e Delete, essa classe atende todas as suas necessidades. Porm para o comando de Select, que retorna os dados da pesquisa preciso formatar a apresentao dos dados. Mas isso assunto para a prxima classe que voc implementar. Antes preciso que voc implemente um programa de teste para classe ComandosSQL para test-la e, mais importante, ver como a mesma funciona. Para isso, abra o JCreator, crie um novo arquivo do tipo Java File, chamado usarComandos.java. Lembre-se de salv-lo na pasta c: \BD2\Fontes. Edite o seguinte cdigo-fonte:
import javax.swing.*; class usarComandos{ public static void main(String args[]){ String Titulos[] = {Cdigo,Descrico,Grau,Srie,Turno}; String Valores[] = new String[5]; String LinhaSQL = insert into turmas values(; ComandosSQL com = new ComandosSQL(); try{ com.AbrirConexao(AcessoDB,root,virtual); if (com.getConectou()){ for (int i=0; i< 5;i++){ Valores[i]=JOptionPane.showInputDialog(Informe o + Titulos[i]+:); Valores[i] =+Valores[i]+; if ( i < 4) Valores[i] =Valores[i]+,; LinhaSQL = LinhaSQL + Valores[i]; } LinhaSQL = LinhaSQL + ); JOptionPane.showMessageDialog(null,LinhaSQL); com.ExecutarComando(LinhaSQL); } }catch(Exception e){ JOptionPane.showMessageDialog(null,Problema: + e.getMessage()); } System.exit(0); } }
O Vetor Titulos representa cada campo da tabela de Turmas do banco de dados MySQL, database chamado sabetudo. O Vetor Valores armazena o valor digitado pelo usurio, na ordem dos campos da tabela Turmas.
A varivel LinhaSQL representa o comando SQL que ser executado pelo banco de dados.
Unidade 6
147
Comentando o cdigo anteriormente citado, o objetivo dessa classe cadastrar uma turma no banco de dados. O atributo Titulos um vetor de constantes que representa cada um dos campos da Tabela de Turmas. Cada valor do vetor apresentado ao usurio na entrada de dados por meio do comando:
Valores[i]=JOptionPane.showInputDialog(Informe o + Titulos[i]+:);
Dessa forma, o vetor chamado Valores recebe o valor de cada campo da insero, na ordem de cadastramento do usurio. Tem-se, ento, duas estruturas:
0 1 Descrio 2 Grau 3 Srie 4 Turno
Ttulos Valores
Matrcula
Na execuo da classe, o valor de cada ttulo informado cadastrado na sua posio respectiva no vetor de valores. O comando que garante esse funcionamento :
for (int i=0; i< 5;i++){ Valores[i]=JOptionPane.showInputDialog(Informe o + Titulos[i]+:);
148
Banco de Dados II
O resultado da execuo desse comando ser a solicitao de cadastro de cada campo da Tabela de Turmas, da seguinte forma:
Descrio
Sexta Serie B
Grau
1
Srie
6
Turno
M
Ttulos Valores
Matrcula 1
O prximo passo converter essas estruturas para um comando SQL, por isso o uso do atributo LinhaSQL, que foi inicializado com o valor Insert into Turmas values (.
Unidade 6
149
Para montar o valor do atributo LinhaSQL, as seguintes regras foram implementadas: incluso do smbolo de aspas simples () antes de depois de cada valor de campo pelo comando:
Valores[i] = + Valores[i] + ;
incluso de uma vrgula (,) aps cada valor do vetor de Valores, exceto o ltimo campo, de ndice 4, que no recebe vrgula, pelo comando:
if ( i < 4) Valores[i] =Valores[i]+,;
concatenao dos valores do vetor de Valores na String LinhaSQL. Imagine essas regras na estrutura de valores da gura anterior, o vetor de valores caria assim:
Valores
1, Sexta srie B, 1 6 M
150
Banco de Dados II
O ltimo passo enviar o comando para o banco de dados e isto foi feito atravs da instruo: com.ExecutarComando(LinhaSQL); Com isso o registro informado estar cadastrado no banco de dados, na Tabela de Turmas. Como voc pode ver, so vrios detalhes da classe usarComandos, por isso muito importante que voc a codique, compile e execute. Aps execut-la quantas vezes desejar, acesse o banco de dados SabeTudo, do MySQL e liste os registros da Tabela de Turmas para ver se batem com as suas operaes de insero. Caso voc no se lembre de como fazer isso, aqui vai algumas dicas: Abra o MySQL pelo atalho do programa MySQL Command Line Client; Na solicitao de senha, informe a palavra virtual e pressione a tecla Enter; Entre no banco de dados SabeTudo pelo comando use sabetudo; J dentro do DataBase SabeTudo, execute o comando show tables para vericar as tabelas deste banco de dados; Execute o comando Select * from Turmas para listar os dados cadastrados na Tabela Turmas. Agora s vericar se os dados batem com os valores cadastrados por voc.
Unidade 6
151
Com isso voc tem uma real impresso de como usar a classe ComandosSQL, mas muita coisa ainda pode ser melhorada, principalmente no que se refere apresentao dos dados a partir de um Select, armazenado na classe ResultSet, mas isso ca para prxima unidade. At breve.
152
Banco de Dados II
Sntese
Nesta unidade voc pde revisar alguns conceitos da programao em Java, principalmente na estrutura de uma classe, como a mesma pode ser instanciada e usada. Junto a comandos que voc j conhecia e que so essenciais para programao em Java, algumas novas classes foram apresentadas a voc, como as classes DriverManager, Connection Statement e ResultSet. No momento essas estruturas podem parecer complexas, mas lembre-se que se tratam de um assunto novo, recm abordado. medida que voc for interagindo com essas classes, inclusive nas unidades que seguem, o uso se tornar fcil e direto. Lembre-se que um dia com certeza voc se questionou sobre os comandos em Java que hoje voc j domina. Naquele momento parecia que voc nunca os aprenderia, e hoje so to banais. Com as classes de conexo a banco de dados acontecer o mesmo.
Unidade 6
153
Atividades de auto-avaliao
1. Qual a vantagem em se apresentar na tela, pelo mtodo getMessage(), o erro de uma Exception, como no exemplo a seguir? try{ //faz algo; }catch(Exception e){ System.out.println(O erro foi : + e.getMessage()); }
154
Banco de Dados II
2. Na definio de uma classe em Java, possvel atualizar o valor de um atributo diretamente, sem que se use o seu mtodo modificador. Essa forma de implementao pode ser considerada equivocada?
Saiba mais
DEITEL, H.M;DEITEL,P.J. Java: como programar. 6 ed. Pearson, 2005. SANTOS, Rui Rossi dos. Programando em Java 2Teorias e Aplicaes. Axcel: 2004. SIERRA,Kathy;BATES,Bert. Java Use a cabea. Alta Books: 2005. THOMPSON, Marco Aurlio. Java 2 & Banco de Dados. So Paulo, rica: 2002. Na internet:
<http://portaljava.com> <http://www.guj.com.br>
Unidade 6
155
UNIDADE 7
Sees de estudo
Seo 1 Estrutura de um Comando de Seleo. Seo 2 Classe ResultSet. Seo 3 Classe ResultSetMetaData. Seo 4 Passagens de Parmetros para Seleo.
158
Banco de Dados II
No caso do comando anterior, o asterisco (*) faz o papel de especicao dos nomes de todas as colunas da Tabela Turmas, do DataBase SabeTudo. Acredito que a estrutura do comando Select no seja novidade para voc, mesmo que voc no se lembre de todas as combinaes possveis para esse comando, como o uso de Where, Group By, Having e Order By. Analisando a estrutura representada pela gura anterior, pode-se notar que o tipo de dado de cada coluna no pode ser identicado por meio do retorno do comando Select, uma vez que esse comando retorna os dados cadastrados, mas no retorna a estrutura da tabela. Para vericar o tipo de dado de cada coluna, usa-se o comando Describe, conforme a gura a seguir.
Sendo assim, o programador que utiliza o banco de dados precisa saber o modelo utilizado para denio de cada tabela, as regras, os nomes e tipos de cada coluna das tabelas. Por isso, imprescindvel que esse prossional tenha um modelo completo em sua mesa, ou em qualquer lugar de fcil visualizao e anlise. Mas como permitir que esses dados de retorno do comando Select sejam interpretados pela linguagem de programao Java, uma vez que so estruturas diferentes? Aqui que entra o ponto fundamental da linguagem de programao e da necessidade de um prossional especializado em banco de dados, pois preciso que ele tenha fundamentos que lhe permitam compreender o que um comando Select retorna.
Unidade 7
159
Sabendo como o comando de seleo funciona, cabe a ele estudar a linguagem a m de encontrar a estrutura de dados que lhe permita interagir com o banco de dados. No caso do Java, esse retorno de um comando de seleo representado por duas estruturas, ou no caso do Java, classes: ResultSet; e ResultSetMetaData; Na prxima seo voc ver o que faz cada uma dessas classes.
O ResultSet a classe responsvel por manipular os dados obtidos da execuo de uma query (pesquisa pelo uso de um Select) .
Sendo assim, para que a classe ResultSet possa ser utilizada necessrio que o banco de dados j tenha sido conectado e aberto. At a verso do JDBC 1.0 o ResultSet no permitia a navegabilidade dentro dos resultados trazidos. Dessa forma, o comando s podia ser utilizado de maneira seqencial, sempre para frente. Uma vez que um registro fosse acessado, no era possvel voltar para acess-lo novamente. A verso JDBC 2.0, mais atual, introduziu a navegabilidade, o posicionamento e a manipulao de dados no ResultSet.
A navegabilidade refere-se capacidade de navegar para frente e para trs nas linhas contidas em um ResultSet. O posicionamento a capacidade de mover o cursor corrente para uma outra posio dentro do ResultSet. A manipulao a capacidade de alterar os valores contidos em um ResultSet.
160
Banco de Dados II
Com isso, a classe passou a disponibilizar um conjunto maior de mtodos de trabalho, como:
Quadro 7.1 - MTODO DA CLASSE RESULTSET
Como o Java uma linguagem Case Sensitive, em que comandos maisculos e minsculos so diferenciados, no quadro apresentado a sintaxe dos comandos j est na forma correta de uso. Para compreender melhor o que faz cada um dos mtodos apresentados no quadro, abra o JCreator e crie um novo arquivo do tipo Java File, renomeie o arquivo para Exemplos, salvandoo na pasta c:\BD2\Fontes. Nesta nova classe sero implementadas as seguintes funcionalidades: conexo com banco de dados; execuo de um comando de Seleo na Tabela Turmas; listagem de todos os dados da Tabela de Turmas; navegao na Tabela de Turmas; apresentao de um menu de interao com usurio.
Unidade 7
161
Essa classe ser manipulada pelo usurio por meio de um Menu com o seguinte layout:
Por meio desse menu o usurio poder listar todos os dados da Tabela de Turmas, bem como navegar pelos registros cadastrados. Veja a seguir o cdigo-fonte dessa classe:
import java.sql.*; import javax.swing.*; class Teste { private static Connection con; private static Statement st; private static ResultSet rs; public static String Turno(String _Turno){ if(_Turno.equalsIgnoreCase(M)) return Matutino; else if(_Turno.equalsIgnoreCase(V)) return Vespertino; else return Noturno; } public static void Conectar(){ try{ String url = jdbc:odbc:AcessoDB; String usuario = root; String senha = virtual; Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); con = DriverManager.getConnection(url,usuario,senha); System.out.println(Conectando.);
162
Banco de Dados II
public static void Desconectar(){ try{ if(st != null){ st.close(); con.close(); } System.out.println(Desconectando.); }catch(Exception e){ System.out.println(Erro desconectando o banco.); } } public static void Selecionar(String Comando){ try{ st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = st.executeQuery(Comando); }catch(Exception e){ System.out.println(Comando no pode ser executado!); } } public static void Listar(){ try{ System.out.println(Codigo: + rs.getString(Codigo_Turma)); System.out.println(Turma: + rs.getString(Descricao) ); System.out.println(Serie: + rs.getString(Serie) ); System.out.println(Grau: + rs.getString(Grau) ); System.out.println(Turno: + Turno(rs.getString(Turno))+\n); }catch(Exception e){ System.out.println(Erro listando os dados.); } } public static void Primeiro() throws SQLException {rs.rst();} public static void Ultimo() throws SQLException {rs.last();} public static void Proximo() throws SQLException {rs.next();} public static void Anterior() throws SQLException {rs.previous();} public static boolean NoPrimeiro() throws SQLException {return rs.isFirst();} public static boolean NoUltimo() throws SQLException {return rs.isLast();} public static void ListarTodos() throws SQLException{ Primeiro(); do{ Listar(); Proximo(); }while (!rs.isAfterLast()); } public static void Menu(){ try{ Conectar(); Selecionar(Select * from Turmas); int op = 0; do{
SEGUE
Unidade 7
163
op = Integer.parseInt(JOptionPane.showInputDialog( 1-Listar Todos\n+ 2-Listar o Primeiro Registro\n+ 3-Listar o ltimo Registro\n+ 4-Listar o Prximo Registro\n+ 5-Listar o Registro Anterior\n+ 6-Sair)); switch (op){ case 1:System.out.println(Listando as Turmas ); ListarTodos(); System.out.println(--------------------); break; case 2:System.out.println( --- PRIMEIRO --- ); Primeiro(); Listar(); System.out.println(---------------------); break; case 3:System.out.println( --- ULTIMO --- ); Ultimo(); Listar(); System.out.println(---------------------); break; case 4: if (!NoUltimo()){ Proximo(); Listar(); }else{ JOptionPane.showMessageDialog(null, No h prximo!); } break; case 5: if (!NoPrimeiro()){ Anterior(); Listar(); }else{ JOptionPane.showMessageDialog(null, No h anterior!); } break; }//nal so switch }while (op != 6); //nal do do Desconectar(); System.exit(0); }catch(Exception e){ System.out.println(Erro: + e.getMessage()); } }//nal da classe Menu public static void main (String args[]) { Menu(); } }//nal da classe Exemplos
164
Banco de Dados II
Veja a seguir o que faz cada uma dos mtodos da classe Exemplos.
Quadro 7.2 - MTODOS DA CLASSE EXEMPLOS Mtodo Objetivo Este mtodo tem como nalidade converter os valores do campo Turno, de char para String. Assim, ao invs de apresentar valores como M,V e N, as sadas sero,respectivamente, Matutino, Vespertino e Noturno. Este mtodo responsvel pela conexo ao Banco de Dados MYSQL, no database SabeTudo, pela fonte de dados AcessoDB. Esse mtodo verica se a conexo foi realizada anteriormente, pelas classes Statement (st) e Connection (con). Em seguida fecha a conexo com banco de dados pelo mtodo close() de cada classe. Esse mtodo prepara o banco de dados para execuo de um comando SQL, pela classe do tipo Statement. public static void Selecionar(String Comando) Na classe ResultSet armazenado o resultado do comando passado como parmetro. ResultSet.TYPE_SCROLL_SENSITIVE permite a navegao no banco de dados, pelas funes rst(),previous(),last(), etc. ResultSet.CONCUR_READ_ONLY no permite que valores resultantes do comando de seleo sejam alterados. Esse mtodo lista na tela os valores de todos os campos da tabela Turma. O mtodo rs.getString() recebe como parmetro o nome do campo que ser lido, e retorna o valor cadastrado no banco de dados no formato de uma String.
public static void Primeiro() public static void Ultimo() public static void Proximo() public static void Anterior()
Esses mtodos permitem a navegao no resultado do comando de seleo que foi executado.
Esse mtodo lista todos os registros resultantes do comando de seleo. public static void ListarTodos() Para listar todos os dados a lgica adota foi, posicionar no primeiro registro do resultado do comando de seleo. Enquanto no chegar ao nal de todos os registros (! rs.isAfterLast()), mostra os dados de cada campo (Listar()) e vai para o prximo (Proximo()) registro.
SEGUE Unidade 7
165
Esses mtodos retornam verdadeiro ou falso para indicar se a posio atual de leitura a primeira ou a ltima de todos os registros retornados pelo comando de seleo. Esse mtodo desenha um Menu na tela, sendo que cada opo do menu faz uma chamada aos mtodos apresentados acima.
O programa principal da classe, o mtodo main (String args []), faz uma nica referencia ao mtodo Menu(), que por sua vez, faz a chamada a todas as funcionalidades do sistema. Agora que voc j est por dentro do que deve fazer a classe acima, edite, compile e execute o cdigo apresentado anteriormente e divirta-se com o funcionamento do programa. No se esquea, em caso de erro de compilao, revise o que voc editou e compare com o que est descrito aqui e, principalmente, tenha pacincia, pois essa uma virtude de qualquer programador.
166
Banco de Dados II
O principal objetivo do acesso aos dados armazenados no metadados a independncia do cdigo implementado das estruturas das tabelas acessada pelo sistema. Por exemplo, na classe da seo anterior, para listar os dados das tabelas o cdigo usado foi:
public static void Listar(){ try{ System.out.println(Codigo: + rs.getString(Codigo_Turma)); System.out.println(Turma: + rs.getString(Descricao) ); System.out.println(Serie: + rs.getString(Serie) ); System.out.println(Grau: + rs.getString(Grau) ); System.out.println(Turno: + Turno(rs.getString(Turno))+\n); }catch(Exception e){ System.out.println(Erro listando os dados.); } }
Note que a soluo est presa estrutura da Tabela Turmas, pois os nomes dos campos so xos, sendo assim, se este mtodo for executado para outra tabela, no funcionar. Ou seja, em muitas situaes se torna necessrio recuperar esses metadados para que se construam consultas dinamicamente, pois em uma grande base de dados mudanas estruturais acontecem com certa freqncia. Existem duas classes que permitem recuperar metadados a partir do Driver JDBC, no pacote java.sql: DatabaseMetaData, e ResultSetMetaData. Na verso JDBC 3.0, h tambm a classe ParameterMetaData, mas no ser tratada nesta seo.
Unidade 7
167
A classe DatabaseMetaData
A classe DatabaseMetaData uma classe mais genrica que permite acessar informaes relacionadas aos metadados sobre o banco de dados em uso, como: objetos do banco de dados; informaes sobre o Driver JDBC ; privilgios de acesso. Essa classe est diretamente relacionada classe Conenction. O cdigo fonte a seguir apresenta um exemplo de uso da classe DatabaseMetaData:
import java.sql.*; import javax.swing.*; public class Metadados { 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.); DatabaseMetaData dbmd = con.getMetaData(); JOptionPane.showMessageDialog(null,Versao do Driver JDBC = + dbmd.getDriverVersion()+\nVersao do Banco de Dados = + dbmd.getDatabaseProductVersion()); }catch(Exception e){ System.out.println(Erro de Conexo:+e.getMessage()); } } }
168
Banco de Dados II
A classe DataBase MetaData apresentar na tela a verso do Driver JDBC e a verso do banco de dados utilizado. Veja o resultado da execuo da classe:
A classe ResultSetMetaData
A classe ResultSetMetaData est relacionada aos metadados das tabelas do banco de dados. Essa classe possibilita a recuperao dinmica de dados como: quantidade de colunas de uma tabela; nome da coluna; tipo de dados da coluna; tamanho de cada coluna. No cdigo-fonte a seguir apresentada uma classe que permite resgatar alguns dados referentes Tabela Turmas.
import java.sql.*; import javax.swing.*; public class MetadadosTabela { 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
Unidade 7
169
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()); } } }
170
Banco de Dados II
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.
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 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.
Unidade 7
171
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()); } } }
172
Banco de Dados II
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.
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
Unidade 7
173
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.
174
Banco de Dados II
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.
Unidade 7
175
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.
176
UNIDADE 8
Sees de estudo
Seo 1 Estrutura da classe de cadastro de alunos. Seo 2 Atributos da classe Alunos. Seo 3 Construtor da classe Alunos. Seo 4 Verificando se o cdigo de matrcula j
existe.
Seo 5 Preparando os valores para gravao. Seo 6 Gravando os dados na Tabela de Alunos. Seo 7 Seo 8
Excluindo os dados da Tabela de Alunos. Alterando os dados da Tabela de Alunos.
178
Banco de Dados II
antes da gravao dos dados na tabela, o usurio visualizar as informaes fornecidas por ele, e o mesmo poder ou no conrmar o cadastro; o usurio no poder cadastrar um novo aluno com um cdigo de matrcula que j tenha sido usado, caso isso acontea, uma mensagem ser enviada identicando o problema ocorrido; a excluso de dados ser realizada com base no cdigo de matrcula informado. Caso a matrcula informada exista no banco de dados, sero apresentados a matrcula e o nome do aluno selecionado; o usurio poder conrmar ou no a excluso solicitada; a atualizao dos dados ser realizada a partir da matrcula do aluno. Caso a matrcula seja localizada na base de dados, sero apresentados os dados cadastrados atualmente e sero solicitados os novos dados, para cada campo da tabela; a pesquisa de dados do aluno ser realizada a partir da matrcula ou do nome do aluno, sendo que o usurio poder especicar quais os dados que ele deseja visualizar. O resultado da pesquisa ser apresentado no formato de um grid, para facilitar a interao com usurio. Bem, com certeza voc deve ter imaginado outras regras de negcio para a Tabela de Alunos. No entanto, o objetivo desta unidade apresent-lo s tcnicas para a realizao de um conjunto mnimo de operaes, e cabe a voc, a partir disso, complementar com as regras que considerar essenciais. Eu estou apenas plantando a semente, voc que deve reg-la para que d frutos e cresa a cada dia. Cada uma das regras acima utilizar um conjunto de comandos em Java aprendidos nesta disciplina nas unidades anteriores, e comandos j estudados por voc na disciplina de Programao Orientada a Objetos.
Unidade 8
179
Para facilitar a sua compreenso do cdigo-fonte, sero apresentadas as regras de implementao separadamente, e no nal da unidade voc ter o mesmo cdigo, porm com todas as regras implementadas em Java. O objetivo dividir para conquistar o conhecimento desejado.
180
Banco de Dados II
Bem, agora que voc j conhece as necessidades de classes externas para o funcionamento da classe Alunos, o prximo passo a apresentao dos atributos que denem as suas caractersticas. Lembre-se sempre que os atributos de uma classe so sempre privados, ou do Java, private. Os atributos da classe Alunos so:
private String Campos[] = { Matrcula *, Nome * , Data de Nascimento *, Idade *, CPF, RG, Nome do Pai *, Nome da Me *, Endereo * , Nmero * , Cidade *, Estado *, Bairro *, Telefone, Celular, Responsvel, Alrgico a, Grupo Sanguneo, Doador de Orgos Sim/No }; private ComandosSQL Comando; private ResultSetMetaData Rsmd; private String NomesColunas[] = new String [19];
Antes que voc se assuste com os cdigos acima, j vou detalhar qual a nalidade do atributo apresentado anteriormente.
Atributo Campos
O atributo Campos um vetor de string, sem tamanho prdenido, por isso a sintaxe String Campos [ ] = { }; Esse atributo representa o Nome de Apresentao de cada coluna da Tabela de Alunos, porm num portugus claro, correto, com acentuaes.
Unidade 8
181
Lembre-se que quando voc cria as colunas da tabela, por meio do comando Create Table, voc no as acentua. Dessa forma, caria muito estranho a solicitao ao usurio do sistema como uma mensagem como: Informe o Endereco? Para resolver esse problema, o atributo Campos representa cada uma das colunas da Tabela de Alunos do banco de dados, seguindo a mesma ordem fsica dos dados, denida no processo criao da tabela e que pode ser visualizada por meio do comando Describe do SQL. Sendo assim, de forma resumida, pode-se dizer que o atributo Campos representa a sada do comando em SQL, Describe Alunos, como mostra a tabela a seguir:
Nome Fsico Matricula Nome Data_Nascimento Idade CPF RG_Identidade Nome_Pai Nome_Me Endereco Numero Cidade Estado Bairro Telefone Celular ChamarPor Alergia GrupoSangue Doador Nome de Apresentao Matrcula * Nome * Data de Nascimento * Idade * CPF RG Nome do pai * Nome da Me * Endereo * Nmero * Cidade * Estado * Bairro * Telefone Celular Responsvel Alrgico Grupo Sanguneo Doador de Orgos Sim/No
Com base nesse vetor do tipo string, com 19 posies, iniciando em 0 e terminando no ndice 18, possvel representar o nome de todas as colunas da Tabela de Alunos. Como esse vetor no muda, ou seja, os nomes de todas as colunas so os mesmos sempre, o atributo foi criado como uma lista
182
Banco de Dados II
constante, em que os valores de cada posio esto representados entre os sinais de abre chaves { e fecha chaves }. Para os campos obrigatrios da Tabela de Alunos, foi acrescentado um sinal de asterisco * ao lado do nome de apresentao da coluna para que o usurio possa identicar aquele dado como obrigatrio.
Atributo Comando
O atributo Comando uma composio (quando uma classe faz referncia direta a outra classe) da classe ComandosSQL, apresentada e implementada nas unidades anteriores. A principal nalidade dessa classe permitir a conexo com banco de dados por meio do mtodo AbrirConexo e possibilitar a execuo de comandos em SQL por meio do mtodo ExecutarComando. Duas caracterstica importantes da classe ComandosSQL, e conseqentemente do atributo Comando, so os mtodos recuperadores getConectou() que indica se a conexo com banco de dados foi realizada ou no, e o mtodo getResultadoSQL() que representa o resultado da execuo de um comando de Select.
Atributo Rsmd
Esse atributo com nome estranho a abreviatura do tipo de classe que ele representa, que uma classe chamada ResultSetMetaData, que tambm foi vista por voc nas unidades anteriores. utilizado para: identicao do nmero de colunas da tabela getColumnCount(); identicao dos nomes fsicos de cada coluna da tabela getColumnName(); identicao do tipo de dado de cada coluna da tabela getColumnType();
Unidade 8
183
Essas identicaes so fundamentais para a gerao do comando de insero de dados na Tabela de Alunos, pois o comando Insert deve referenciar os nomes fsicos de cada coluna, e os campos do tipo Varchar, Char e Date devem ter o valor de cadastro entre aspas. Por exemplo, no caso do cadastro da Matrcula e do Nome do Aluno, o comando Insert dever ter a seguinte sintaxe:
Insert into Alunos (Matricula,Nome) values (1,Marcelo Medeiros);
Os campos Matricula e Nome representam as colunas fsicas da Tabela de Alunos, j os valores de cadastros so informado pelo usurio do sistema, entretanto, os dados literais, como Nome, devem estar entre aspas. Essas regras de recuperar o nome fsico dos campos e acrescentar aspas aos campos literais e data devem ser geradas de forma automtica pelo sistema, sem a interao do usurio.
Atributo NomesColunas
O atributo NomesColunas um vetor de string, de tamanho 19, que armazenar os nomes fsicos das colunas da Tabela de Alunos. Esse atributo est diretamente relacionado ao atributo Rsmd, visto anteriormente, uma vez que a gerao dos nomes fsicos das colunas realizada por meio da classe ResultSetMetaData. Basicamente, a sua nalidade armazenar os nomes das colunas retornadas pela classe ResultSetMetaData, por meio do atributo Rsmd e do mtodo getCoumnName().
184
Banco de Dados II
Vou apresentar a voc qual a nalidade das principais linhas de comando do cdigo-fonte acima.
Unidade 8
185
Linha 1
Representa o nome do mtodo construtor, que deve ter o mesmo nome da classe. Tenha sempre o cuidado com maisculas e minsculas, pois a linguagem Java chamada de Case Sensitive, sendo assim, diferencia maisculas e minsculas.
Linha 2
Instancia a classe ComandosSQL, representada pelo atributo comandos. A criao da classe realizada pela instruo new (novo). Uma classe s pode ser utilizada se anteriormente ela tenha sido instanciada, caso contrrio, ser gerada um erro de NullPointerException.
Linha 3
Aps a criao da classe ComandosSQL, realizada a tentativa de conexo com o banco de dados pelo mtodo AbrirConexo, que recebe como parmetros o nome da fonte (criada via ODBC), o nome do usurio administrado do banco (root) e a senha de acesso (virtual).
Linha 4
Nessa linha de comando vericado se a conexo com banco de dados foi realizada (getConectou() retornando true). Caso a conexo no tenha sido realizada, uma mensagem ser apresentada ao usurio e a aplicao ser nalizada (Syetm. exit(0)), pois sem acesso ao banco de dados, o usurio no poder realizar nenhuma operao no sistema.
Linha 13
A chegada nessa linha pela execuo do programa indica que a conexo foi realizada, sendo assim, executada uma seleo de todos os registros da Tabela de Alunos para obteno de um ResultSet, representado pelo atributo local res.
186
Banco de Dados II
Linha 15
O mtodo GerarNomesColunas recebe como parmetro o ResultSet do atributo res e, pela classe ResultSetMetaData, preenche o atributo NomesColunas com o nome fsico de cada coluna da Tabela de Alunos. Veja o cdigo do mtodo GerarNomesColunas:
1 2 3 4 5 6 7 8 9 public void GerarNomesColunas(ResultSet rs){ try{ Rsmd = rs.getMetaData(); for (int i = 1; i <= Rsmd.getColumnCount(); i++) NomesColunas[i-1] = Rsmd.getColumnName(i); }catch(Exception e){ System.out.println(Erro Gerando Nome das Colunas); } }
Esse mtodo recebe um ResultSet por meio do parmetro rs. Esse ResultSet analisado pela classe ResultSetMetaData, representado pelo atributo Rsmd. Um lao for executado, varrendo todas as colunas retornadas pelo comando Select * from Alunos, e pelo mtodo getColumnName(i), cada uma dessas colunas tem o seu nome fsico armazenado no atributo NomeColunas.
187
O mtodo, chamado de MatriculaExiste, retornar um valor lgico, verdadeiro ou falso, para indicar se o cdigo j foi ou no utilizado. Esse mtodo possui o seguinte cdigo-fonte:
1 2 3 4 5 6 7 8 9 10 11 public boolean MatriculaExiste(String Mat){ try{ Comando.ExecutarComando( select * from alunos where Matricula = + Mat); ResultSet rs = Comando.getResultadoSQL(); return (rs.next()); }catch(Exception e){ System.out.println(Erro Pesquisando Matricula.); return true; } }
Veja o que faz cada linha. 1- O mtodo MatriculaExiste recebe um parmetro do tipo string, chamado Mat, e retorna um boleano. 3- realizada uma consulta na Tabela de Alunos, ltrando todos os registros que possuam a matrcula com valor igual ao valor do parmetro chamado Mat. 5- O atributo local rs, do tipo ResultSet, armazena o resultado da execuo do comando ltro realizado na linha 3 da rotina. 6- O mtodo next() retornar true (verdadeiro) caso exista pelo menos um registro dentro do ResultSet, o que indica que existe algum aluno com a mesma matrcula. 9- Caso, por algum motivo, essa rotina no possa ser executada, o tratamento de exceo do Java retornar um valor verdadeiro, para evitar que sejam cadastradas duas matrculas com mesmo valor, pois a validao no pode ser realizada.
188
Banco de Dados II
Veja o que faz o cdigo acima. O mtodo FormatoCampo recebe dois parmetros, o primeiro, chamado de Pos, do tipo inteiro, representa qual coluna da tabela ser analisada. O segundo parmetro, chamado de Valor, do tipo string, representa o valor que ser gravado na Tabela de Alunos.
Unidade 8
189
Esse mtodo retornar o mesmo valor de entrada, com ou sem aspas, dependendo do tipo de dado. Caso o tipo de dado seja Varchar, Char ou Date, o valor de entrada recebe aspas antes e depois do valor, por meio do comando:
Saida = +Valor + ;
O atributo Sada representa o valor de entrada, acrescido ou no das aspas. Caso a rotina no possa ser executada, o tratamento de exceo do mtodo retornar o mesmo valor de entrada.
190
Banco de Dados II
As regras adotadas no cdigo de insero de dados foram: solicitar o valor de cada campo da Tabela de Alunos ao usurio do sistema. O nome de cada campo est armazenado no vetor chamado Campos; armazenar no vetor Valores o valor informado pelo usurio, por meio do mtodo JOptionPane. showInputDialog; vericar se a matrcula informada j foi cadastrada no sistema; vericar se o campo informado corresponde informao de Doador de Orgos, caso seja, gravar 1 ou 0 nesse campo; vericar quais os campos foram informados pelo usurio e armazenar os nomes fsicos de cada coluna e o seu valor de cadastro por meio dos atributos Colunas e Dados; solicitar a conrmao do cadastro. Veja essas regras codicadas em Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public void CadastrarDados(){ int i=0,itens=0,j=0; String Escolha = S; String Mensagem = Conrma o Cadastro dos Seguintes Dados: \n; String Colunas=,Dados=,Operacao=; String ValorLido=; JOptionPane.showMessageDialog(null, Cadastro de ALUNOS \n+ Os campos com * so Obrigatrios!); String Valores[] = new String[19]; while (i < 19){ Valores[i] = JOptionPane.showInputDialog(null,Campos[i]); ValorLido = Valores[i]; do{ if (i == 0 && MatriculaExiste(ValorLido)){ JOptionPane.showMessageDialog(null,Este Nmero de Matrcula j foi usado!\n+ Informe um novo cdigo para Matrcula); ValorLido = JOptionPane.showInputDialog(null,Campos[i]); Valores[i] = ValorLido; }
SEGUE
Unidade 8
191
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
}while(i==0 && MatriculaExiste(ValorLido)); if( Valores[i].equals() && (Campos[i].indexOf(*) != -1)){ JOptionPane.showMessageDialog(null, Este campo obrigatrio \n+ Por Favor, recadastre-o!); } else{ i++; } if (!ValorLido.equals()) itens++; } if (!Valores[18].equals()){ if (Valores[18].charAt(0) == S || Valores[18].charAt(0) == s) Valores[18] = 1; //Sim else Valores[18] = 0; //No } j=0; for(i=0;i<19;i++){ if (!Valores[i].equals()){ Mensagem = Mensagem + Campos[i] + : + Valores[i]+\n; Colunas=Colunas+NomesColunas[i]; Dados =Dados +FormatoCampo(i+1,Valores[i]); if (j < itens-1){ Colunas=Colunas + ,; Dados = Dados + ,; } j++; } } Escolha = JOptionPane.showInputDialog(Mensagem + \n Sim(S) - No(N)); if (Escolha.equalsIgnoreCase(S)){ Operacao = insert into alunos(+Colunas+) values (+Dados+); try{ Comando.ExecutarComando(Operacao); }catch(Exception e){ System.out.println(e.getMessage()); } } }
192
Banco de Dados II
Abaixo um comentrio sobre as principais operaes realizadas pelo mtodo de cadastro de alunos.
1 2 3 4 5 6 7 9 11 12 14 15 24 31 34 41 42 43 44 45 46 54 55 Nome do mtodo. Atributos para obteno do nome dos campos, total de campos cadastrados e obteno do nome fsico das colunas. Atributo para conrmao ou no do cadastro. Atributo que apresentar os dados informados pelo usurio. Atributo para armazenamento dos nomes das colunas, do valor de insero de cada coluna e armazenamento do comando Insert gerado. Atributo para armazenamento do valor informado pelo usurio. Um aviso para o usurio de que os campos com * so obrigatrios. Atributo para armazenamento de todos os valores informados pelo usurio do sistema. Realiza um lao para a solicitao do valor de cadastro para todos os campos da tabela. Solicita o valor do campo. Repete o cadastro da matrcula at que seja informado um cdigo que ainda no foi usado. Verica se o valor informado o da matrcula e se a mesma j foi cadastrada. Verica se o campo cadastrado um campo obrigatrio, ou seja, possui um asterisco (*). Verica se o valor do campo cadastrado diferente de vazio. Incrementa o contador de campos cadastrados. 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. Verica os valores cadastrados para todos os campos. Se o valor no for vazio. Monta a mensagem com o nome do campo e o valor cadastrado. Monta o atributo Colunas com os nomes fsicos dos campos preenchidos; Monta o atributo Dados com os valores informados para cada campo, vericando se o valor deve ou no car entre aspas. Se no for o ltimo campo cadastrado, acrescenta uma vrgula para separar cada nome de coluna e cada valor informado pelo usurio. Apresenta os valores cadastrados pelo usurio e solicita a conrmao do cadastro. Se a escolha for sim, grava os dados na tabela de alunos.
Unidade 8
193
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 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 public void ExcluirPorMatricula(){ String Escolha = S; String Saida = ; String Mat = JOptionPane.showInputDialog(Informe a Matrcula para Excluso:); try{ Comando.ExecutarComando(select * from alunos where Matricula = + Mat); ResultSet rs = Comando.getResultadoSQL(); while(rs.next()) { Saida = Matrcula: + rs.getString(Matricula)+\n+ Nome : + rs.getString(Nome); } if (Saida.equals()){ JOptionPane.showMessageDialog(null,Matrcula Inexistente!); } else{ JOptionPane.showInputDialog(Conrma a excluso do Aluno:\n+ Saida+\n+ Sim(S) - No(N)); if (Escolha.equalsIgnoreCase(S)) Comando.ExecutarComando( Delete from alunos where Matricula = + Mat); } }catch(Exception e){ System.out.println(Excluso no pode ser feita!+e.getMessage()); } }
194
Banco de Dados II
Unidade 8
195
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
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; } } 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++; } } Operacao = Update Alunos set ; for (i=1;i<19;i++){ if (!Valores[i].equals()){ Operacao = Operacao + NomesColunas[i] + =+ FormatoCampo(i+1,Valores[i]);
SEGUE
196
Banco de Dados II
62 63 64 65 66 67 68 69 70 71 72 73 74 75 }
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()); }
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.
Unidade 8
197
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.
198
Banco de Dados II
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 } i++; } } Valores[i-1] = 0; //No
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.
Unidade 8
199
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.
200
Banco de Dados II
Por enquanto, d uma analisada no cdigo a seguir que apresenta todas as rotinas implementadas pela classe Alunos:
1 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 import javax.swing.*; import java.sql.*; import java.util.*; class Alunos{ private ResultSetMetaData Rsmd; private ComandosSQL Comando; private String NomesColunas[] = new String [19]; private String Campos[] = {Matrcula * , Nome * , Data de Nascimento * , Idade * , CPF, RG, Nome do Pai * , Nome da Me * , Endereo * , Nmero * , Cidade * , Estado * , Bairro * , Telefone , Celular, Responsvel, Alrgico a, Grupo Sanguneo, Doador de Orgos Sim/No };
public Alunos(){ Comando = new ComandosSQL(); Comando.AbrirConexao(AcessoDB,root,virtual); if (!Comando.getConectou()){ JOptionPane.showMessageDialog(null,Erro de Conexo com Banco de Dados\n + Entre em contato com Suporte ! \n + A aplicao ser FECHADA ! ); System.exit(0); } else{
SEGUE
Unidade 8
201
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
try{ Comando.ExecutarComando(select * from alunos); ResultSet res = Comando.getResultadoSQL(); GerarNomesColunas(res); }catch(Exception e){ System.out.println(Erro Gerando Nome das Colunas); } } } public boolean MatriculaExiste(String Mat){ try{ Comando.ExecutarComando(select * from alunos where Matricula = + Mat); ResultSet rs = Comando.getResultadoSQL(); return (rs.next()); }catch(Exception e){ System.out.println(Erro Pesquisando Matricula.); return true; } }
public void GerarNomesColunas(ResultSet rs){ try{ Rsmd = rs.getMetaData(); for (int i = 1; i <= Rsmd.getColumnCount(); i++) NomesColunas[i-1] = Rsmd.getColumnName(i); }catch(Exception e){ System.out.println(Erro Gerando Nome das Colunas); } } public String FormatoCampo(int Pos,String Valor){ String Saida=Valor; try{ switch(Rsmd.getColumnType(Pos)) { case Types.VARCHAR:Saida = + Valor +; break; case Types.DATE: Saida = +Valor +; break; case Types.INTEGER: Saida = Valor; break; case Types.CHAR: Saida = +Valor+;
SEGUE
202
Banco de Dados II
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
break; case Types.FLOAT:Saida = Valor; break; } return Saida; }catch(Exception e) { return Saida; } } public void CadastrarDados(){ int i=0,itens=0,j=0; String Escolha = S; String Mensagem = Conrma o Cadastro dos Seguintes Dados: \n; String Colunas=,Dados=,Operacao=; String ValorLido=; JOptionPane.showMessageDialog(null, Cadastro de ALUNOS \n+ Os campos com * so Obrigatrios!); String Valores[] = new String[19]; while (i < 19){ Valores[i] = JOptionPane.showInputDialog(null,Campos[i]); ValorLido = Valores[i]; do{ if (i == 0 && MatriculaExiste(ValorLido)){ JOptionPane.showMessageDialog(null,Este Nmero de Matrcula j foi usado!\n+ Informe um novo cdigo para Matrcula); ValorLido = JOptionPane.showInputDialog(null,Campos[i]); Valores[i] = ValorLido; } }while(i==0 && MatriculaExiste(ValorLido)); if( Valores[i].equals() && (Campos[i].indexOf(*) != -1)){ JOptionPane.showMessageDialog(null, Este campo obrigatrio \n+ Por Favor, recadastre-o!); } else{ i++; } if (!ValorLido.equals()) itens++; } if (!Valores[18].equals()){ if (Valores[18].charAt(0) == S || Valores[18].charAt(0) == s)
Unidade 8
SEGUE
203
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
Valores[18] = 1; //Sim else Valores[18] = 0; //No } j=0; for(i=0;i<19;i++){ if (!Valores[i].equals()){ Mensagem = Mensagem + Campos[i] + : + Valores[i]+\n; Colunas=Colunas+NomesColunas[i]; Dados =Dados +FormatoCampo(i+1,Valores[i]); if (j < itens-1){ Colunas=Colunas + ,; Dados = Dados + ,; } j++; } } Escolha = JOptionPane.showInputDialog(Mensagem + \n Sim(S) - No(N)); if (Escolha.equalsIgnoreCase(S)){ Operacao = insert into alunos(+Colunas+) values (+Dados+); try{ Comando.ExecutarComando(Operacao); }catch(Exception e){ System.out.println(e.getMessage()); } } } public void ExcluirPorMatricula(){ String Valores[] = new String[19]; String Escolha = S; String Saida = ; String Mat = JOptionPane.showInputDialog(Informe a Matrcula para Excluso:); try{ Comando.ExecutarComando(select * from alunos where Matricula = + Mat); ResultSet rs = Comando.getResultadoSQL(); if (rs.next()){ Rsmd = rs.getMetaData(); for (int i = 1; i <= 2; i++) { Valores[i-1] = rs.getString(Rsmd.getColumnName(i)); Saida = Saida + Campos[i-1]+:+Valores[i-1]+\n; }
SEGUE
204
Banco de Dados II
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
} if (Saida.equals()){ JOptionPane.showMessageDialog(null,Matrcula Inexistente!); } else{ JOptionPane.showInputDialog(Conrma a excluso do Aluno:\n+ Saida+\n+ Sim(S) - No(N)); if (Escolha.equalsIgnoreCase(S)) Comando.ExecutarComando(Delete from alunos where Matricula = + Mat); } }catch(Exception e){ System.out.println(Excluso no pode ser feita!+e.getMessage()); } } 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:); try{ 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; }
SEGUE
Unidade 8
205
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
} 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(null,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++; } } 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()); } } }
206
Banco de Dados II
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.
Unidade 8
207
Atividades de auto-avaliao
1. Qual a finalidade em se criar uma rotina de verificao 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
208
UNIDADE 9
Sees de estudo
Seo 1 Estrutura atual da classe de cadastro de
alunos.
Seo 2 Comando de seleo. Seo 3 Preparando a rotina de consulta. Seo 4 Menu de acesso.
210
Banco de Dados II
Alunos Atributos ResultSetMetaData Rsmd; ComandosSQL Comando; String NomesColunas[] String Campos[] Mtodos boolean MatriculaExiste(String Mat) void GerarNomesColunas(ResultSet rs) String FormatoCampo(int Pos,String Valor) void CadastrarDados() void ExcluirPorMatricula() void AlterarPorMatricula()
Apesar de se tratar de uma estrutura simples, essa classe tem rotinas bem funcionais, como voc deve ter notado ao implement-la. Caso voc no tenha implementado a classe, seria muito bom que voc realizasse essa tarefa para interagir diretamente com os cdigos em Java, e mais do que isso, para que voc insira na implementao o seu toque pessoal, com as rotinas que voc est acostumado a fazer. As implementaes apresentadas aqui e na unidade anterior possuem as caractersticas da minha forma de programar e com certeza em muitos casos voc se indagou: Eu fao diferente!. Isso mais do que normal, por isso muito importante que voc implemente o cdigo e verique o que voc pode fazer de diferente, personalizando a sua implementao. S no esquea que o resultado nal tem que ser o mesmo, ou seja, funcionar de acordo com as regras de negcio do sistema.
Unidade 9
211
Um comando Select um comando de retorno, sendo assim, sempre haver uma informao de sada, nem que seja para indicar que nenhum registro atendeu as condies de ltro do comando, ou seja, o retorno foi nenhuma linha selecionada.
Muito pouco. Partindo do princpio que se est selecionando dados de uma mesma tabela, o que pode variar : o nome das colunas selecionadas; os nomes das colunas usadas na gerao da condio de ltro. Por exemplo, usando a Tabela de Alunos como referncia, podese montar um comando de seleo da seguinte forma:
Select ? from Alunos where ? = ?.
Calma, no se assuste! Apenas pense que no lugar de cada smbolo de ? pode ser inserida uma informao de acordo com o comando de seleo desejado. Selecionar todos os dados dos alunos chamados Marcelo:
Select * from Alunos where Nome = Marcelo.
212
Banco de Dados II
Sendo assim, possvel chegar concluso que o comando Select precisa de trs parmetros para funcionar: nome das colunas; nome do campo de ltro; valor do campo de ltro. E essa a regra que ser adotada para a criao da rotina de consulta na base de dados de alunos, que ser implementada em Java por meio de um mtodo com a seguinte estrutura:
public void Consultar(String Colunas, String Campos, String Valores).
Essa estrutura representa o nome fsico das colunas da Tabela de Alunos, utilizada para denio dos campos que sero selecionados por meio do comando Select e no possui interao com usurio do sistema, pois ele no precisa saber os nomes das colunas para conseguir utilizar o sistema. A outra estrutura a seguinte:
Campos Matrcula * Nome * ... Grupo_Sanguneo Doador de Orgos
Essa estrutura representa os nomes de cada campo da Tabela de Alunos, porm na forma que ser apresentada ao usurio, inclusive com a graa correta.
Unidade 9
213
Essas duas estruturas trabalham em paralelo, pois utilizam os mesmos ndices de armazenamento, veja:
Nomes Colunas Campos 0 Matricula Matrcula * 1 Nome Nome * ... ... 17 Grupo_Sangue Grupo_Sanguneo 18 Doador Doador de Orgos
Dessa forma, um comando de seleo com a sintaxe: Select Matricula,Nome,Grupo_Sangue from Alunos where Matricula = 10; Esse comando de seleo utilizar os nomes de colunas e de campos das posies 0,1 e 17. Entretanto, para o comando de seleo, executado pelo banco de dados e que retornar ao Java os dados que atendem a condio de pesquisa, as colunas Matricula, Nome e Grupo_Sangue representam as posies 1, 2, 3. Para ajudar na sua compreenso, veja o diagrama a seguir:
GRFICO 9.1 - FORMA DE REPRESENTAO DE UM SELECT NA CLASSE ALUNOS
Para tornar essa forma de representao simples, independente do comando Select gerado, preciso que ao se especicar um comando de seleo, a aplicao em Java identique os nomes das colunas fsicas e de apresentao, com seus respectivos ndices e o valor representativo no retorno do Select.
214
Banco de Dados II
Para isso, sero necessrios dois novos mtodos na classe de Alunos. O primeiro mtodo, chamado de Posio, retorna a posio do nome fsico da coluna selecionada em relao estrutura de Nomes de Colunas. O cdigo em Java car assim:
1 2 3 4 5 6 public int Posicao(String Item){ int i=0; while((i < 19) && ((!NomesColunas[i].equalsIgnoreCase(Item))) i++; return (i+1); }
Esse mtodo recebe um item como parmetro. Por meio de um lao condicional se faz a comparao de todas as palavras armazenadas no vetor NomesColunas com o valor do item informado. O lao se encerra quando todas as posies j tiverem sido comparadas ou quando o item procurado igual a palavra armazenada no vetor. Para cada item pesquisado, o sistema precisa saber qual a sua posio dentro do vetor NomesColunas. Sendo assim, para cada coluna selecionada preciso armazenar o seu ndice na estrutura NomesColunas. O objetivo principal saber quais colunas fazem parte do Select montado, entre as 19 colunas que compem a Tabela de Alunos. No caso do Select :
Select Matricula,Nome,Grupo_Sangue from Alunos where Matricula = 10;
O resultado seria:
Nomes Colunas 0 Matricula 1 Nome ... 17 Grupo_Sangue 18 Doador
Unidade 9
215
Ou seja, das 19 colunas da tabela de Alunos, os ndices 0,1 e 17 esto sendo requisitados. Sendo que a coluna Matrcula representada pela expresso Matrcula * , a coluna Nome pela expresso Nome * e a coluna Grupo_Sangue pela expresso Grupo Sanguneo. Para armazenar os ndices das colunas requisitadas ser implementado o seguinte mtodo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public Vector MontarIndices(String Colunas){ Vector Indices = new Vector(); String Coluna=; Colunas = Colunas + ,; for (int i=0;i< Colunas.length();i++){ if (Colunas.charAt(i) != ,){ Coluna = Coluna + Colunas.charAt(i); } else{ Indices.addElement(Posicao(Coluna)+); Coluna = ; } } return Indices; }
Esse mtodo recebe o nome das colunas que sero selecionadas, algo como Nome, Matricula,Cidade e retorna um vetor dinmico do tipo Vector.
Esse vetor chamado de dinmico porque o seu tamanho definido durante a execuo do programa a cada nova insero de um elemento.
Para montar os ndices, realizado um lao que varre caractere por caractere do parmetro Colunas, que representa cada coluna selecionada, porm separadas por vrgula - com exceo da ltima coluna que no possui uma vrgula no nal. Por isso o mtodo insere no nal do parmetro Colunas uma vrgula (Colunas = Colunas + ,);
216
Banco de Dados II
Toda vez que uma vrgula encontrada como smbolo dentro do parmetro Colunas, signica que uma coluna selecionada foi denida. Pelo mtodo posio inserido no vetor de ndices a posio em que essa coluna se encontra dentro do vetor de NomesColunas. Como a denio dos campos que sero buscados uma interao direta com o usurio do sistema, preciso uma interface na qual o usurio especique quais os campos sero selecionados, porm de forma amigvel. A seguir apresentado um cdigo-fonte que implementa a interface de solicitao dos campos que deniro o comando Select.
Unidade 9
217
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public String SelecionarItens(){ char Continua = S, Escolha = S; int i=0; String Escolhidas = ; do{ if ((Escolhidas.length() > 0 ) && (Escolha == S || Escolha == s)) Escolhidas = Escolhidas + ,; Escolha = JOptionPane.showInputDialog( Selecionar o campo: + Campos[i] + \n S-Sim N-No,S).charAt(0); if(Escolha == S || Escolha == s){ Escolhidas = Escolhidas + NomesColunas[i]; } i++; Continua = JOptionPane.showInputDialog( Deseja Sair? Sim(S) - No (N),N).charAt(0); }while (i < 19 && (Continua == N || Continua == n)); return Escolhidas; }
Esse mtodo solicita uma conrmao do usurio com relao aos campos da tabela que ele deseja visualizar no resultado da execuo do Select. Para cada campo apresentada uma tela, com o nome do campo e a solicitao se o mesmo deve ser includo na seleo. Por padro, a resposta vem sempre com o valor Sim (S). Como os campos so separados por vrgula, a cada insero de uma coluna de pesquisa, uma vrgula includa ao lado. O processo se repete at que todos os campos sejam informados ou o usurio cancele a operao, que por padro vem com o valor No (N). Com essas rotinas prontas, o prximo passo a criao do mtodo de seleo, que possui o seguinte cdigo:
218
Banco de Dados II
1 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
public void Consultar(String Colunas, String Campo,String Valor){ String Saida = ; Vector Selecionados = MontarIndices(Colunas); char Continua = S; String Valores[] = new String[19]; int i=0,pos=0; try{ Comando.ExecutarComando(select + Colunas + from alunos where + Campo + like % + Valor +%); ResultSet rs = Comando.getResultadoSQL(); while ((Continua == S || Continua == s) && (rs.next())){ Saida = ; Rsmd = rs.getMetaData(); i=1; pos=0; while( i < 19){ if (Selecionados.contains(i+)){ Valores[pos] = rs.getString(Rsmd.getColumnName(pos+1)); if (i == 19 && Selecionados.contains(i+)){ if(Valores[pos].equals(1)) Valores[pos] = Sim; else Valores[pos] = No; } Saida = Saida + Campos[i-1]+:+Valores[pos]+\n; pos++; } i++; } JOptionPane.showMessageDialog(null,Saida); Continua = JOptionPane.showInputDialog( Continuar a Listagem? Sim(S) - No (N)).charAt(0); } if (Saida.equals()){ JOptionPane.showMessageDialog(null,Campo + Inexistente!); } }catch(Exception e){ System.out.println(Consulta no pode ser feita!+e.getMessage()); } }
Unidade 9
219
Esse mtodo permite a consulta de qualquer registro na Tabela de Alunos. Para que ele funcione so necessrios os parmetros colunas, campo de ltro e valor de ltro. O mtodo apresenta na telas os campos solicitados pelo usurio da aplicao e o valor de cada campo. O processo se repete at que todos os cadastros sejam visualizados ou o cliente cancele a operao. Esse mtodo destinado s pesquisas que envolvem descriminao de quais colunas sero apresentadas na tela, caso se deseje a pesquisa de todos os campos da tabela, o mtodo para isso possui o seguinte cdigo:
1 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 public void ConsultarTodos(){ String Saida = ; char Continua = S; String Valores[] = new String[19]; int i=0; try{ Comando.ExecutarComando(select * from alunos); ResultSet rs = Comando.getResultadoSQL(); while ((Continua == S || Continua == s) && (rs.next())){ Saida = ; Rsmd = rs.getMetaData(); for (i=0; i < Rsmd.getColumnCount();i++){ Valores[i] = rs.getString(Rsmd.getColumnName(i+1)); if (i == 18){ if(Valores[i].equals(1)) Valores[i] = Sim; else Valores[i] = No; } Saida = Saida + Campos[i]+:+Valores[i]+\n; } JOptionPane.showMessageDialog(null,Saida); Continua = JOptionPane.showInputDialog( Continuar a Listagem? Sim(S) - No (N),S).charAt(0); } }catch(Exception e){ System.out.println(Consulta no pode ser feita!+e.getMessage()); } }
220
Banco de Dados II
Unidade 9
221
Esse mtodo implementa uma chamada para cada um dos mtodos vistos anteriormente, permitindo a interao do usurio com todas as funcionalidades do sistema. Essa chamada ter a seguinte interface:
Para usar a classe Alunos preciso que voc crie uma nova classe que instancie a classe Alunos e execute a chamada do mtodo Menu. Veja:
1 2 3 4 5 6 7 class Dados_Alunos{ public static void main(String args[]){ Alunos A = new Alunos(); A.Menu(); System.exit(0); } } Para concluir esta unidade, consulte na Midiateca a codificao completa da classe, que apesar de simples muito funcional e permite todas as regras de negcio da Tabela de Alunos.
222
Banco de Dados II
Sntese
Nesta unidade voc pde praticar as tcnicas de programao em Java para a criao de mtodos que permitem a seleo de dados em tabelas. A base de funcionamento dos mtodos est fundamentada na sintaxe do comando Select, que pode ser dividido em: colunas selecionadas e condio para seleo. O principal objetivo desses mtodos implementados permitir que os comandos de seleo sejam criados sem que o usurio do sistema tenha que saber como um comando em SQL funciona, isso deve ser transparente para ele, porm deve ser dominado pelo programador do software.
Atividade de auto-avaliao
1. O processo de implementao de um consulta em Java pode ser considerado um gerador de comandos?
Unidade 9
223
Saiba mais
DEITEL, H. M.; DEITEL,P. J. Java: como programar. 4. ed. Bookman, 2003. HORSTMANN, C. S. Big Java. Artmed Bookman, 2004. THOMPSON, M. A. Java 2 & Banco de Dados. Erica, 2002.
224
Espero ter atingido pelo menos o objetivo de plantar a semente da busca pela informao. Parabns, voc acaba de dar mais um grande passo rumo ao objetivo maior que se tornar um prossional que domine a tecnologia de banco de dados e tenha a capacidade de desenvolver solues computacionais que atendam as necessidades de um mercado to competitivo. Se a caminhada parecia longa, que bom, voc acaba de encurtla! Desejo que esta sua caminhada te aproxime cada vez mais do seu objetivo maior, mesmo que em alguns momentos o nal da caminhada se apresente mais distante, levante a cabea, tome mais flego, e rumo ao sucesso.
226
Referncias
ANSELMO, Fernando. Tudo que voc queria saber sobre JDBC. Visual Books: 2001. __________.Aplicando Orientao a Objetos em Java.Visual Books: 2005. COSTA,Luis Carlos da.Java para Iniciantes.Cincia Moderna:2002. CHEN, Peter. Modelagem de dados: a abordagem entidaderelacionamento para projeto lgico. So Paulo: Makron Books, 1990. DATE, C J. Bancos de dados: fundamentos. Rio de Janeiro: Campus, 1985. _________. Introduo a sistema de banco de dados. 8. ed. Rio de Janeiro: Campus, 1990. DEITEL, H.M.;DEITEL,P.J.Java-ComoProgramar.Sexta edio.Ed. Pearson,2005. FILHO,Trajano Leme. Metodologia de Desenvolvimento de Sistema.So Paulo: Axcel,2003. HORSTMANN, Cay S.Big Java. Porto Alegre: Bookman, 2004. MECENAS, Ivan. Fundamentos Swing e JDBC: 2 edio. Alta Books: 2005. NIEDERAUER, Juliano. PRATES, Rubens. Mysql Guia de Referncia Rpida. So Paulo: NovaTec, 2005. RANGEL,Alexandre. Mysql-Projeto Modelagem e Desenvolvimento de Banco de Dados.Alta Books: 2005. SANTOS, Rui Rossi dos. Programando em Java 2-Teorias e Aplicaes. Axcel: 2004. SIERRA,Kathy;BATES,Bert. Java Use a cabea. Alta Books: 2005. SUHRING, Steve. Mysql A Bblia. Rio de Janeiro: Campus, 2002. THOMPSON, Marco Aurlio. Java 2 & Banco de Dados. So Paulo, rica: 2002.
2. Quando se desenvolve um produto, como uma cadeira, uma casa, etc., durante o processo de criao possvel apresent-lo ao cliente, para seu acompanhamento. Porm, no caso de desenvolvimento de softwares no h um produto palpvel para ser apresentado. Como agir em uma situao como esta? Resposta: O desenvolvimento de software possui muitas particularidades, principalmente porque no existe um produto que possa ser apresentado ao cliente. O desenvolvimento possui etapas bem definidas, e at que se chegue a implementao, no h o que se apresentar ao cliente. Desta forma, a relao entre desenvolvedores e cliente deve ser de transparncia, confiana e cordialidade. Ele deve se sentir seguro com relao ao que ele contratou e com o que ele ter como produto final. Durante a fase de implementao muito comum que se apresente ao cliente pequenas verses do produto final para sua prvia aprovao. Estas pequenas verses so chamadas de prottipo, que alm de verificar se o projeto est no rumo certo, permitem que o cliente tenha um contato mais direto com o produto esperado.
Unidade 2
1. A utilizao de script para criao de banco de dados no obrigatrio, porm muito utilizado pelos profissionais de banco de dados. Sendo assim, o script deve possuir algumas vantagens, voc poderia citar algumas? Resposta: Organizao das tabelas; Criao automtica das tabelas do banco de dados; Facilidade em executar vrias vezes os comandos em SQL; Facilidade em realizar alteraes no modelo de banco de dados; O modelo de banco de dados se mantm atualizado e refletindo a realidade.
2. A alterao do modelo de dados deve gerar, conseqentemente, uma alterao nos script de criao do mesmo, pois, caso contrrio, o modelo no representar fielmente o banco de dados utilizado. Esta afirmao esta correta? Justifique a sua resposta. Resposta: O banco de dados fsico, criado a partir de um script, ou no, deve representar fielmente as regras e tabelas especificadas no modelo de
232
Banco de Dados II
dados. O modelo de dados representa graficamente a forma na qual os dados so armazenados e estruturados no modelo fsico. Sendo assim, o modelo de dados um espelho do banco de dados criado. Se a criao de um banco de dados realizada a partir de um script, qualquer alterao no modelo deve ser atualizada no script, e viceversa.
3. O MySQL permite a execuo de um script de criao de tabelas de um banco de dados sem que tenha sido especificado antes qual o database usado? Caso isso no seja possvel, como garantir que as tabelas sempre sero criadas no database correto ao se executar o script? Resposta: Como o database representa um conjunto de tabelas, caso o usurio tente criar um conjunto de tabelas sem especificar em qual database, o MySQL no permite a criao do modelo de dados. Para evitar que este problema ocorra, a melhor soluo inserir no script de criao do modelo, na primeira linha o comando use seguido do database que deve ser aberto. Desta forma, a criao do modelo ocorrer sempre no local correto. Exemplo: use SabeTudo;
Unidade 3
1. O Java uma linguagem de programao atual, moderna e muito utilizada. O profissional que um especialista nesta linguagem de programao possui grandes chances de atuar no mercado atual. Sendo assim, o especialista nesta linguagem no precisa se preocupar, pois estar sempre garantido no mercado, dado que muito difcil uma linguagem de programao deixar de ser usada, sobretudo a linguagem Java. Esta afirmao correta? Qual a sua opinio? Resposta: No. Qualquer profissional, independentemente da rea de atuao, precisa se atualizar. Na rea de informtica isto se torna ainda mais verdade, pois uma rea nova, em que as mudanas acontecem de forma constante e rpida. A cada instante novas tecnologias e metodologias surgem, e o profissional que no estiver atualizado, passa a ficar obsoleto. So muitas as tecnologias que surgiram como a melhor soluo, e pouco tempo depois, sumiram do mercado, levando com elas os profissionais que tinham ali a nica forma de exercer as suas atividades.
233
Unidade 4
1. Uma caracterstica fundamental num driver de conexo com banco de dados a sua transparncia, ou seja, quanto maior for a sua abstrao para o programador, melhor a ferramenta. Sendo assim, pode-se afirmar que o programador e o especialista em banco de dados no precisam saber como funciona o driver, mas sim, saber como tirar o melhor proveito dele. Esta afirmativa correta? Justifique sua resposta. Resposta: Sim, correta. Quanto maior o nvel de abstrao do driver de conexo, melhor para o programador e para o especialista de banco de dados. Estes dois profissionais no precisam saber como o driver foi implementado, qual linguagem foi usada, apenas precisam ter certeza de que o driver confivel e funciona de acordo com as suas necessidades.
2. O uso das Fontes de Dados uma forma de abstrao para o programador? Resposta: Sim. A partir do uso da fonte de dados, o programador no precisa saber o local em que o banco de dados est conectado, quem o usurio administrador e a senha de acesso. Tudo isso abstrado pelo uso de um apelido para fonte de dados, o que tende a facilitar a sua vida durante o processo de implementao.
Unidade 5
1. O uso de ferramentas que auxiliam o profissional de banco de dados com interao com a analise de sistemas e programao, as chamadas ferramentas CASE, podem facilitar o processo de implementao a ponto que no necessite de um especialista? Resposta: Acredito que no, a maioria das chamadas ferramentas CASE um auxlio ao especialista. Todo o processo de analise de requisitos e funcionalidades de um sistema ainda dependem muito do conhecimento e da experincia do especialista. Chego a dizer que um especialista realiza as sua tarefas sem a ferramenta CASE, j a ferramenta CASE no faz nada sem o especialista.
234
Banco de Dados II
2. Seria correto afirmar que o processo de compilao de um arquivo em Java est diretamente relacionada ao cdigo-fonte e a execuo diretamente relacionada ao arquivo resultado da compilao, chamado de .class? Resposta: Com certeza. Um programa em Java formado pelo cdigo fonte, que obedece as regras de sintaxe e semntica da linguagem, representados pela extenso .java. Quando da compilao de um programa em Java, atravs do comando Javac, que na verdade a execuo do arquivo javac.exe, existente na pasta Bin do diretrio em que est instalado o Java, o resultado se tudo estiver correto um arquivo com mesmo nome, porm com a extenso .class. Este arquivo .class que pode ser executado pela mquina virtual do Java, atravs do arquivo java.exe tambm localizado na pasta Bin da instalao do Java, representado de forma resumida como o comando java do prompt do Windows.
Unidade 6
1. Qual a vantagem em se apresentar na tela, atravs do mtodo getMessage(), o erro de uma Exception, como no exemplo a seguir? try{ //faz algo; }catch(Exception e){ System.out.println(O erro foi : + e.getMessage()); } Resposta: O tratamento de erro atravs do try-catch no Java uma ferramenta essencial e em muitos casos obrigatria. Diferente de algumas linguagens em que o tratamento de exceo uma opo do programador, no Java isto no existe. Sendo assim, cabe ao programador utilizar este recurso da melhor forma possvel. Atravs do mtodo getMessage() possvel apresentar ao usurio do sistema ume mensagem mais significativa, que possa indicar o problema , do que simplesmente uma mensagem do tipo, houve erro. Mesmo que a mensagem do mtodo getMessage() seja em ingls.
235
2. Na definio de uma classe em Java, possvel atualizar o valor de um atributo diretamente, sem que se use o seu mtodo modificador. Esta forma de implementao pode ser considerada equivocada? Resposta: Veja o exemplo a seguir:
O uso dos mtodos modificadores no uma mera formalidade do Java. Apesar da linguagem aceitar que um atributo da classe receba um valor diretamente, sito deve ser evitado. O principal papel de um modificador alterar o valor de um atributo, e deve ser esta a nica forma de modificao utilizada. Alm disto, o modificador tem a funo de garantir a integridade dos dados, como por exemplo, evitar que idades negativas sejam cadastradas. Se o valor for alterado sem o uso do modificador, a regra de integridade estar desfeita. Veja o exemplo: public void setIdade(int _Idade){ if(_Idade >=0 ) Idade = _Idade; else Idade = 0; }
Unidade 7
1. Cite exemplos de metadados em banco de dados relacional. Resposta: So exemplos de metadados em um banco de dados relacional: nome do banco de dados, nomes das tabelas e seus atributos, relacionamentos (chaves primrias e estrangeiras) e tamanho das tabelas (nmero de linhas e colunas).
236
Banco de Dados II
2. De que forma a linguagem Java obtm informaes sobre os metadados de um SGDB? Resposta: Por meio do Driver JDBC. Esse pacote permite que o programador se conecte ao banco de dados e possa manipul-lo. Na verdade, trata-se de um alto nvel de abstrao, pois ao usar classes como DatabaseMetaData o usurio est interagindo diretamente com os metadados do SGDB usado, porm ele nem fica sabendo disto.
Unidade 8
1. Qual a finalidade em se criar uma rotina de verificao para valores cadastrados em colunas do tipo chave primria? Resposta: O cadastramento de valores repetidos em colunas do tipo chave primria geram um erro grave que pode encerrar o programa de forma inesperada. Problemas como esse podem gerar certa desconfiana do usurio com relao funcionalidade do sistema e das suas garantias de funcionamento. Alm disso, o sistema de banco de dados no permitir o cadastramento de dados repetidos em colunas com restrio de chave primria, sendo assim, no h necessidade de forar esse tipo de operao para que o Java gere um tratamento de exceo.
Unidade 9
1. O processo de implementao de um consulta em Java pode ser considerado um Gerador de Comandos? Resposta: Sim. Pois para fazer com que uma rotina em Java crie uma seleo a partir dos dados informados pelo usurio necessrio que o programador tenha um bom conhecimento sobre a sintaxe do comando SQL utilizado. A partir dos dados informados pelo usurio o sistema ter que criar o comando em SQL que represente fielmente a seleo desejada, e de forma transparente, pois o usurio no precisa saber como um comando em SQL funciona. Sendo assim, os dados informados pelo usurio precisam se transformar em um comando em SQL, de forma automtica, eficiente e correta, caso contrrio o sistema no funcionar.
237