LabBancodeDados - DCA

Propaganda
Laboratório de Banco de Dados
Ricardo Ribeiro Gudwin
DCA-FEEC-UNICAMP
(versão 1.0 - 10/09/2002)
OBJETIVOS: Neste laboratório, estaremos estudando como acessar um banco de dados
relacional SQL por meio do JDBC. Aprenderemos a fazer um acesso simples ao banco de
dados, e em seguida construiremos uma aplicação em Java com interface gráfica, para fazer
acessos de leitura, escrita e consulta ao banco de dados.
EXERCÍCIO 1: Verificando o Banco de Dados
Para este exercício, usaremos um banco de dados MySQL instalado na máquina servidora da
rede do laboratório, e o software MySQL Control Center.
1 - Obtenha o endereço da máquina servidora e solicite ao professor que crie para você no
servidor de banco de dados:
- um banco de dados para seu uso
- um login/password para o acesso ao banco
2 - Utilizando essas informações, utilize o software MyCC instalado em sua máquina para
criar uma tabela de nome "cliente", com os seguintes campos:
Identificador, Nome, Endereço, Cidade, CEP, Telefone
3 - Selecione o campo Identificador como "Primary Key"
4 - Introduza 10 linhas com informações no banco de dados
5 - Verifique se as informações foram inseridas corretamente, e se o banco de dados está apto
a operar. Caso esteja tudo funcionando, vá para o próximo exercício.
EXERCÍCIO 2: Conectando com o Banco de Dados
Para este exercício, utilizaremos o programa exemplo apresentado na parte teórica do curso
para fazer o acesso ao banco de dados criado no exercício 1.
1 - Analise o código a seguir (retirado das transparências do curso) e tente entendê-lo:
public static void main(java.lang.String[] args) {
try {
int n, i = 0;
StringBuffer dado;
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:db2:sample","usrid","pwd");
Statement
st = con.createStatement();
ResultSet
rs = st.executeQuery("SELECT * FROM ORG");
ResultSetMetaData md = rs.getMetaData();
int colunas = md.getColumnCount();
while (rs.next()) {
for (n=1; n<=colunas; n++) {
dado = new StringBuffer(rs.getString(n));
System.out.print(dado);
}
System.out.print("\n");
i++;
}
System.out.println("\n"+i+" colunas selecionadas");
rs.close();
st.close();
con.close();
}
catch (ClassNotFoundException
e) {System.out.println(e);}
catch (SQLException
sqle) {System.out.println(sqle);}
catch (InstantiationException ie) {System.out.println(ie.toString());}
catch (IllegalAccessException iae) {System.out.println(iae.toString());}
}
2 - Identifique quais as linhas que necessitam ser alteradas para o banco de dados em questão.
Para isso, consulte o arquivo README do MySQL Connector/J 2.0.14.
3 - Crie no JBuilder um novo projeto para nosso programa de teste, e copie o código acima
dentro da rotina main criada pelo JBuilder.
4 - Faça as alterações necessárias para adaptar o código ao banco de dados MySQL
(lembrando que o exemplo acima é válido para a base de dados DB2, e não para o MySQL).
5 - Faça as adaptações necessárias para acessar a base de dados criada por você no exercício
1.
6 - Cadastre o arquivo mysql-connector-java-2.0.14-bin.jar como uma biblioteca interna do
JBuilder (Tools -> Configure Library -> New), e depois cadastre a biblioteca no projeto
(Project -> Project Properties -> Required Libraries).
7 - Compile e rode o programa, e verifique se ele acessa da maneira adequada a sua base de
dados.
EXERCÍCIO 3: Construindo uma aplicação Java com
Interface Gráfica para acesso ao banco de dados
Neste exercício, criaremos uma pequena interface gráfica para fazermos o acesso ao banco de
dados, permitindo a inserção de novos registros, o apagamento de registros e a busca por
informações em seu banco de dados.
1 - Inicie o JBuilder e crie uma nova aplicação:
Clique em File -> New ...
Selecione Application
Altere o nome da aplicação para um nome de seu gosto (por exemplo BDAccess)
Altere o diretório onde os arquivos serão armazenados
Na tela dos detalhes da classe de aplicação, dê um nome conveniente para a classe
principal: Algo como BDAccessMain
Na tela dos detalhes da classe de frame, dê um nome conveniente para a classe da
janela principal: Algo como BDAccessMainWindow
Clique nas opções: Generate Menu Bar, Generate Toolbar, Generate Status Bar,
Generate About Dialog e Center Frame on Screen e então em Finish.
2 - Compile e Teste o protótipo apertando F9.
3 - Prepare-se para alterar a estrutura do menu. Clique na aleta Design abaixo do código fonte,
e selecione o componente jMenuBar1 na tela da esquerda. O menu deve então aparecer para
edição na tela principal.
4 - Insira um novo menu Edit
- Clique sobre o menu Help já existente sobre a barra de menus. Em seguida, clique
com o botão da direita (ainda sobre Help), e selecione "Insert Menu".
- Altere o nome do novo menu criado para Edit
5 - Crie os seguintes sub-menus (agora clicando com botão da direita sobre o sub-menu
abaixo de Edit)
- Insert New Record
- Delete Record
- Update Record
- Query Record
6 - Nesse ponto, você pode de novo recompilar o programa e testá-lo.
7 - Vamos criar uma função de atendimento para cada uma das 4 opções do menu Edit.
Inicialmente, na árvore da esquerda, acesse os Menu-Itens de jMenu1, trocando os nomes de
jMenuItem1, jMenuItem2, jMenuItem3 e jMenuItem4 para insert, delete, update e query. Para
cada uma das opções, clique sobre ela na árvore, vá para o painel da direita e clique no tag
"Events" e selecione o evento "actionPerformed". Clique então no campo em branco a direita
do evento, e deve aparecer um nome de método (e.g. "insert_actionPerformed"). Clique então
<ENTER>, para que a rotina seja criada e associada ao menu. Repita isso para os 4
MenuItens. Para verificar se as funções estão funcionando, insira a linha:
System.out.println("Insert");
(substituindo "Insert" por "Delete", "Update" e "Query" nas demais rotinas), e compile e teste
o programa. Após um teste bem sucedido, retire as linhas inseridas.
8 - Vamos agora criar as janelas para o atendimento individual de cada opção. Inicialmente,
vamos criar uma janela para o "Insert". Crie uma nova classe (File -> New Class), e chame-a
de um nome apropriado (e.g. InsertWindow). Lembre-se de que essa classe deve herdar de
JFrame, e portanto selecione "javax.swing.JFrame" no campo "Base Classe" do wizard de
criação da classe. Observe que essa não será uma classe principal, e portanto você pode retirar
o check da caixa "Generate Main Method". As demais caixas podem ficar marcadas.
9 - Vá agora para a tela de design da janela, e selecione o layout "null". Crie então com Labels
e JTextFields mais ou menos a seguinte composição:
10 - Troque os nomes dos jTextFields para os nomes de seus labels (id, nome, endereco,
cidade, cep e telefone), na árvore de controles do lado esquerdo.
11 - Troque os nomes dos botões para insert e cancel, e insira funções para o tratamento do
evento actionPerformed nos dois botões.
12 - Vamos agora ligar esta janela ao menu "Insert New Register ... ".
- Vá até o código da classe BDAccessMainWindow (ou com o nome que você deu a
esta classe, e crie uma variável para guardar a informação do InsertWindow (ou o nome que
você escolheu):
InsertWindow iw;
- Vá então ao código do método insert_actionPerformed (ou o nome que você deu ao
método que serve o menu "Insert New Window") e acrescente as seguintes linhas:
if (iw == null) iw = new InsertWindow();
Dimension dm = iw.getPreferredSize();
iw.setSize(dm);
Point loc = getLocation();
iw.setLocation(loc.x+50,loc.y+50);
iw.setTitle("Insert New Record ...");
iw.setVisible(true);
Estas linhas irão então criar uma nova InsertWindow e mostrá-la quando o menu
"Insert New Window" for pressionado.
- Implemente o método relacionado ao botão Cancel, colocando a linha abaixo no
método que trata o botão (e.g. cancel_actionPerformed):
this.setVisible(false);
- Compile e teste para ver se está funcionando.
13 - Vamos agora efetivamente começar o processo de inserção de dados na base de dados.
Para isso, insira o seguinte código na rotina de tratamento do botão Insert, fazendo as devidas
adaptações necessárias aos nomes das variáveis:
StringBuffer my_id, my_nome, my_endereco, my_cidade, my_CEP, my_telefone;
my_id = new StringBuffer(id.getText());
my_nome = new StringBuffer(nome.getText());
my_endereco = new StringBuffer(endereco.getText());
my_cidade = new StringBuffer(cidade.getText());
my_CEP = new StringBuffer(CEP.getText());
my_telefone = new StringBuffer(telefone.getText());
System.out.println(my_id+" "+my_nome+" "+my_endereco+" "+my_cidade+"
"+my_CEP+" "+my_telefone);
Este código coleta os dados dos TextFields, armazenando-os em Strings.
14 - Agora, para continuar o processo, copie a rotina de acesso ao banco de dados
desenvolvida no exercício 2 na sequência do código de tratamento do botão Insert,
acrescentando a linha:
ResultSet
rs_1 = st.executeQuery(
"INSERT INTO cliente ( Id, Nome, Endereco, Cidade, CEP, Telefone ) VALUES( \"" + my_id
+"\",\""+my_nome + +"\",\""+my_endereco + +"\",\""+my_cidade
+"\",\""+my_CEP +"\",\""+my_telefone+"\");");
logo antes da linha semelhante a
ResultSet
rs = st.executeQuery("SELECT * FROM ORG");
O que estamos fazendo aqui é inserindo uma nova linha na base de dados, e logo em seguida
lendo a base de dados para ver como ficou após a linha inserida.
Compile e rode para ver como ficou.
15 - Repita os passos de 8 a 14 deste exercício, mas agora fazendo as adaptações necessárias
para se fazer uma QUERY à base de dados, utilizando os valores preenchidos dos TextFields
como índice de busca.
16 - Repita os passos de 8 a 14 deste exercício, mas agora fazendo as adaptações necessárias
para se DELETAR uma linha da base de dados.
17 - Repita os passos de 8 a 14 deste exercício, mas agora fazendo as adaptações necessárias
para se fazer um UPDATE de um registro da base de dados.
Download