Você está na página 1de 9

Prof. MSc.

Ajalmar Rocha

Desnvolvimento de Aplicaes Cliente-Servidor

Centro Federal de Educao Tecnolgica do Cear - CEFETCE


Desenvolvimeto de Software

Fortaleza - Cear
novembro de 2007
i

1 Acesso a Banco de Dados em JSP

1.1 Introduo

O acesso a banco de dados de fundamental importncia para as aplicaes comerci-


ais hoje em dia. A sua relevncia deriva dos recursos que os Sistemas de Gerenciamento
de Banco de Dados (SGBD) disponibilzam para os seus usurios, tais como: manipu-
lao de arquivos do sistema operacional; gerenciamento de transaes, ou seja, operao
que devem aconter no formato "tudo ou nada"; ferramentas de backup/restore; controle
de acesso e permisses na realizao de operaes por usurio; manipulao dos dados
armazenados atravs de uma linguagem que se tornou padro entre os diversos SGBDs,
a SQL (Structured Query Language); dentre outros recursos mais os quais poderamos
comentar.

1.1.1 Breve resumo sobre Banco de Dados

Os nomes Banco de Dados (BDs), Sistemas de Gerenciamento de Banco de Dados


(SGBDs) e sistemas de banco de dados (SBDs) so semelhantes porm tais conceito
diferem como na descrio a seguir. De forma simples, um BD pode ser visto como uma
estrutra que contm um grupo de tabelas, enquanto os diversos BDs so gerenciados por
um sistema com nalidade especca denominado SGBD. No entanto SBDs so sistemas
que fazem conexo com um SGBD para usufruir dos seus recursos disponibilizados.

Assim, diante do exposto, falar sobre acesso a banco de dados em Java, quer dizer:
criar uma aplicao em Java que conecte a um SGBD que esteja manipulando um banco de
dados o qual possui uma ou mais tabelas de interesse a qual desejamos realizar operaes
de insero, alterao, exluso e busca.

As operaes de alterao, exluso e busca podem ser aplicadas a diversas linhas


de uma tabela (tambm denominado registro). A operao de insero pode adicionar
uma linha na tabela permitindo especicar cada um dos campos a ser adicionado nesse
1.1 Introduo ii

registro. As operaes de alterao e consultas podem ser aplicadas em registros e campos


especcos, isto ca mais claro a seguir.

Para realizar as operaes acima descritas sobre um banco de dados (e gerenciado


por um SGBD) requerem o conhecimento de uma liguagem de manipulao de dados
denominada SQL (Structured Query Language). Parte dessa linguagem fornece comandos
que so especicamente disponibilizados para tal nalidade.

Para inserir um registro em uma tabela podemos usar o seguinte comando:

INSERT INTO CLIENTES(nome,fone) VALUES('ajalmar','9999-9999');

esse comando insere na tabela "clientes"um registro de valores 'ajalmar' e '9999-9999'


para os campos "nome"e "fone". Assim mais uma linha ser adicionada a tabela.

Para alterar um registro ou masi registros em uma tabela podemos usar o seguinte
comando:

UPDATE CLIENTES SET fone = '8888-8888' WHERE nome = 'ajalmar';

esse comando altera a(s) linha(s) j existente(s) na tabela "clientes"para os quais o campo
nome possui como valor "ajalmar". Assim, uma ou mais linhas podem ser alteradas na
tabela. Observao: sem a clusula WHERE do comando UPDATE todas as linhas da
tabela teriam aos seus campos fone atribudos o valor '8888-8888', logo a clusula WHERE
permiti-nos ltrar quais as linhas na tabela que devem ser alteradas.

Para excluir um registro em uma tabela podemos usar o seguinte comando:

DELETE FROM CLIENTES WHERE nome = 'ajalmar';

esse comando retira a(s) linha(s) j existente(s) na tabela "clientes"para os quais o campo
nome possui como valor "ajalmar". Assim, uma ou mais linhas podem ser excludas na
tabela. Observao: sem a clusula WHERE do comando DELETE todas as linhas da
tabela seriam excludas, logo a clusula WHERE permiti-nos selecionar quais as linhas
na tabela que devem ser excludas.

Para buscar registros em uma tabela podemos usar o seguinte comando:

SELECT * FROM CLIENTES WHERE nome = 'ajalmar';


1.1 Introduo iii

esse comando pesquisa e retorna a(s) linha(s) j existente(s) na tabela "clientes"para os


quais o campo nome possui como valor "ajalmar". Assim, uma ou mais linhas podem ser
buscadas na tabela. Observao 1: sem a clusula WHERE do comando SELECT todas
as linhas da tabela seriam retornadas, logo a clusula WHERE permiti-nos novamente
selecionar quais as linhas na tabela que devem ser buscadas. Observao 2: O "*"no co-
mando indica que todos os campos so retornados para cada uma das linhas determinadas
pelo clusula WHERE, assim se desejar apenas o campo fone poderia se usar o comando
da seguinte forma: "select fone from clientes where nome = 'ajalmar'".

Um fato importante a se observado, os comandos "INSERT", "UPDATE",


"DELETE"E "SELECT"assumem que a tabela "CLIENTES"j existe. Como dito ante-
riormente, a tabela deve ter sido criada pelo administrador do MySQL pois caso a tabela
no existe um erro em tempo de execuo obtido devido ao fato de o MySQL no possuir
a estrutura para manipular os dados. O comando SQL para criar uma tabela dado a
seguir:

CREATE TABLE CLIENTES(

ID INT NOT NULL AUTO_INCREMENT,

NOME VARCHAR(50),

FONE VARCHAR(15),

PRIMARY KEY(ID)

Na Figura 1.1 so apresenatados os passos para a criao das estruturas necessrias


via linha de comandos no MySQL. Assim, com o MySQL instalado execute o "MySQL
Command Line Client"pelo 'menu iniciar'. Imediatamente solicitado a senha associada
ao usurio 'root' (usurio administrador do MySQL) a qual foi congurada como 'admin'
durante a instalao. Em seguida, foi criado um Banco de Dados de nome 'db' pelo
comando 'create database db;'. Posteriormente ocorre a criao de uma tabela com o
uso do comando 'create database clientes'. Veja que para a criao da tabela clientes
necessita-se entrar em uso do database 'db' que feito com o comando 'use db;'. Aps
todo esse procedimento a tabela est pronta para sofrer manipulao pelos comandos
SQL.

De posse desse gupo de conceitos podemos agora conhecer como realizar acesso a
banco de dados usando a linguagem Java.
1.2 Acesso a Banco de Dados iv

Figura 1.1: Uso de linha de comando para criar a tabela CLIENTES.

1.2 Acesso a Banco de Dados

O acesso a banco de dados, como j mencioando, requer primeiro que se crie uma
conexo com o SGBD, pois como qualquer aplicao baseada na arquitetura cliente-sevidor
uma conexo deve ser estabelecia. O cdigo para realizao de tal conexo dado a seguir:

String url = "jdbc:mysql://localhost/bd?user=root&password=admin"

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection( url );

Sobre o cdigo acima algumas consideraes podem ser feitas. Na varivel url temos
a informaes necessrias para a conexo com o SGBD. O trecho 'jdbc:mysql' informa a
utilizao do driver o MySql, ou seja, um arquivo .JAR (semelhante a um arquivo com-
pactado .ZIP ) que contm um grupo de classes java compiladas e as quais implementam
o drive especco para a conexo com o SGBD. Esse arquivo pode ser baixado dire-
1.2 Acesso a Banco de Dados v

tamente do site "http://dev.mysql.com/downloads/connector/j/5.1.html"ou diretamente


pelo link "http://www.deti.ufc.br/ ajalmar/mysql-connector-java-5.1.5-bin.jar". Pode-se
fazer o download do arquivo "mysql-connector-java-5.1.5.zip"e descompactando-o temos o
arquivo "mysql-connector-java-5.1.5-bin.jar"o qual contm as classes e interfaces que im-
plementam o driver (como por exemplo enontramos a classe com.mysql.jdbc.Drive). Esse
arquivo .JAR deve ser adicionado varivel de ambiente CLASSPATH para possibilitar
sua posterior utilizao (ou ao projeto no Eclipse na parte de libraries ).

Voltando ao cdigo, no trecho 'localhost' informa-se o nome da mquina onde o sevidor


MySQL est instalado. A parte 'bd' o nome do banco de dados nos quais se encontram
as tabelas de interesse a serem acessadas, enquanto no trecho igual a 'root' temos o nome
do super-usurio do MySQL (SGBD) denido como padro e o campo 'admin' e a senha
congurada no momento da instalao. Por m, a execuo do mtodo getConnection(...)
passando a String 'url' como parmetro possibilita-se a criao da conexo com o SGDB
(no caso o MySQL).

Aps a conexo necessita-se da criao de uma interface do tipo 'java.sql.Statement'


que representa uma simples comando SQL e tem a responsabilidade pela execuo do
comando repassado para o MySQL.

Statement stm = conn.createStatement();

String sql = "select * from clientes";

ResultSet rs = stm.executeQuery(sql);

Assim, na String 'sql' passado o comando e o resultado retornado em uma interface


do tipo java.sql.ResultSet . Com os resultados em mos e possveis de serem acessados
pelo uso da interface ResultSet com o seguinte cdigo:

while (rs.next()) {

String nome = rs.getString("nome");

System.out.println("nome = "+ nome);

O comando de repetio 'while' vai fazer com que cada registro a partir do primeiro
seja acessado at se chegar a ltima linha quando 'rs.next()' retorna 'false'.

Os comandos a seguir fecham o Statement e a conexo com o banco.

stm.close();
1.2 Acesso a Banco de Dados vi

conn.close();

1.2.1 Classe Java para Acesso ao MySQL

import java.sql.*;

public class MySQLHardDB {

public static void main(String args[])

throws ClassNotFoundException, SQLException {

String url = "jdbc:mysql://localhost/bd?user=root&password=admin";

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection( url );

Statement stm = conn.createStatement();

String sql = "select * from clientes";

ResultSet rs = stm.executeQuery(sql);

while (rs.next()) {

String nome = rs.getString("nome");

System.out.println("nome = "+ nome);

stm.close();

conn.close();

1.2.2 JSP para Acesso ao MySQL

De forma semelhante ao acesso em uma classe java se faz atravs de um arquivo


JSP. Veja que fora o cdigo HTML adicional muda apenas a forma como as classes
so importadas em JSP (pelo uso da diretiva page no trecho de cdigo <%@page im-
port="java.sql.*"%> ). O cdigo abaixo, que pode ser visto em detalhes, tem por obje-
tivo imprimir todos os valores que esto armazenados no campo nome para cada uma das
1.2 Acesso a Banco de Dados vii

linhas da tabela CLIENTES em uma pgina JSP.

<%@ page language="java"contentType="text/html; charset=ISO-8859-


1"pageEncoding="ISO-8859-1"%>

<%@page import="java.sql.*"%>

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=ISO-8859-1

<title>Acesso a banco de dados com JSP</title>

</head>

<body>

<%

String url = "jdbc:mysql://localhost/bd?user=root&password=admin";

Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection( url );

Statement stm = conn.createStatement();

String sql = "select * from clientes";

ResultSet rs = stm.executeQuery(sql);

while (rs.next()) {

String nome = rs.getString("nome");

%>

<%="nome = "+ nome%>

<%

stm.close();

conn.close();

%>
1.2 Acesso a Banco de Dados viii

</body>

</html>

1.2.3 Observao

Aqui utilizamos cdigo SQL dentro das classes Java ou arquivos JSP, isto um pssimo
hbito. O interessante ter as queries (comandos de consulta, insero, alterao e
excluso) dentre de objetos conhecidos como DAO (e at mesmo com os cdigos SQL em
arquivos de congurao, como um XML ou um arquivo de properties). Desta maneira,
caso voc mude de banco de dados, pode facilmente mudar nos DAOs as queries que no
so compatveis. Assim, uma forma mais eciente com o uso de DAOs estar disponvel
em material para as prximas aulas.

Alm disso, apresentamos aqui apenas o java.sql.Statement, mas altamente re-


comendvel o uso do java.sql.PreparedStatement, onde voc pode reutilizar bastante os
statements e o seu driver JDBC pode ajudar bastante na hora de voc ter de fazer coisas
como escape de Strings (colocar na frente das aspas de uma String, por exemplo). Fica
aqui a recomendao da leitura da api desta classe.

Você também pode gostar