Você está na página 1de 30

Java Database Connectivity - JDBC

Acessando Bancos de Dados com Java


David Ricardo do Vale Pereira david@jeebrasil.com.br

Ementa

O que JDBC? Arquitetura da API Utilizando JDBC Controle de Transaes DAO Data Access Object DataSources Referncias

JDBC O que JDBC? Diferentes bancos de dados possuem diferentes formas de se comunicar com uma aplicao:

JDBC O que JDBC? Problemas...


Manuteno Necessidade de aprendizado de vrias APIs

Soluo!
Adio de uma nova camada Abstrai especificidades de comunicao com os bancos

JDBC O que JDBC? JDBC Java Database Connectivity

JDBC Arquitetura do JDBC


O JBDC prov um conjunto de interfaces para acesso ao BD. Uma implementao em particular dessas interfaces chamada de driver. Cada BD possui um Driver JDBC especfico (que usado de forma padro - JDBC). O drivers de outros fornecedores devem ser adicionados ao CLASSPATH da aplicao para poderem ser usados. Desta maneira, pode-se mudar o driver e a aplicao no muda.

JDBC Arquitetura do JDBC

JDBC Outras Alternativas

JDBC Arquitetura do JDBC


Tipos de Drivers JDBC: Tipo 1 - Driver Ponte JDBC-ODBC uma implementao nativa que conecta uma aplicao Java a um banco de dados atravs de ODBC configurado na mquina. Tipo 2 - Driver API-Nativa Parcialmente Java uma casca sobre uma implementao nativa de um driver de acesso ao banco (ex: este driver utiliza o OCI para Oracle). Tipo 3 - Driver Java c/ Net-Protocol Utiliza um middleware para a conexo com o banco de dados. Tipo 4 - Driver Java Puro Driver totalmente implementado em Java. Conhece todo o protocolo de comunicao com o BD e pode acessar o BD sem software extra. o tipo de driver mais indicado.

JDBC Arquitetura do JDBC

JDBC Principais classes do JDBC (pacote java.sql)


DriverManager - gerencia o driver e cria uma conexo com o banco. Connection - a classe que representa a conexo com o bando de dados. Statement - controla e executa uma instruo SQL . PreparedStatement - controla e executa uma instruo SQL. melhor que Statement. ResultSet - contm o conjunto de dados retornado por uma consulta SQL. ResultsetMetaData - a classe que trata dos metadados do banco.

JDBC Hierarquia de Uso do JDBC

JDBC Utilizando JDBC Carregando o Driver

Class.forName(org.postgresql.Driver);

JDBC Utilizando JDBC Criando uma Conexo


String url = jdbc:postgresql://hostname/dbname; String username = usuario; String password = senha; Connection con = DriverManager.getConnection(url, username, password);

JDBC Utilizando JDBC Criando Consultas


Statement st = con.createStatement(); ResultSet rs = st.executeQuery(select * from usuario);

JDBC Utilizando JDBC Pegando Resultados


ResultSet rs = st.executeQuery(select login, senha from usuario) while(rs.next()) { String login = rs.getString(login); String senha = rs.getString(senha); }

JDBC Exerccio
Criar Banco de Dados Escola e tabela Aluno Inserir os Seguintes Dados:

Buscar dados com JDBC

JDBC Utilizando JDBC Inserindo, Atualizando, Removendo Dados


String sql = insert into aluno (matricula, nome, sobrenome) values ( + mat + , + nome + , + sobrenome + ); Statement st = con.createStatement(); int numInsercoes = st.executeUpdate(sql);
Um inteiro recebe o nmero de registros modificados aps a execuo do comando SQL

JDBC Utilizando JDBC Para o exemplo anterior, o comando SQL pode ser insert, update ou delete

JDBC Exerccio Inserir a seguinte linha na tabela aluno:


Matricula: 2002006 Nome: Manoel Sobrenome: Silva

Alterar o sobrenome do Aluno cuja matrcula 2002002 para Couto Remover o Aluno cuja matrcula 2002004

JDBC Utilizando JDBC PreparedStatement


Evoluo do Statement Pr-compila as consultas, aumentando eficincia Adio de parmetros ao SQL Evita ataques de SQL Injection

JDBC Utilizando JDBC


String sql = insert into aluno (matricula, nome, sobrenome) values (?, ?, ?); PreparedStatement st = con.prepareStatement(sql); st.setInt(1, mat); st.setString(2, nome); st.setString(3, sobrenome); int numInsercoes = st.executeUpdate();

JDBC Transaes no so criadas e fechadas explicitamente. A conexo tem uma propriedade denominada Autocommit. Se essa propriedade TRUE, toda transao automaticamente comitted. Caso contrrio:
o comando commit() pode ser usado para confirmar o efeito das transaes. o comando rollback() pode ser usado para cancelar o efeito das transaes.

Valor padro TRUE.

JDBC Controle de Transaes Connection


setAutoCommit(false) commit() rollback()

JDBC Controle de Transaes


con.setAutoCommit(false); String sql = insert into pessoa (id, nome) values (?,?); PreparedStatement st = con.prepareStatement(sql); try { st.setInt(1, 5); st.setString(2, Joo); st.executeUpdate(); sql = update pessoa set nome=? where id=?; st = con.prepareStatement(sql); st.setString(1, Jos); st.setInt(1, 3); st.executeUpdate(); con.commit(); } catch(Exception e) { con.rollback(); }

JDBC DAO Data Access Object Padro de projeto (Core J2EE) para abstrair camada de acesso a dados Implementao J2EE do padro Data Mapper (PoEAA, Fowler)

JDBC DAO Data Access Object Exemplo:


public interface UsuarioDAO { public Usuario get(int id); public List<Usuario> listAll(); public void create(Usuario usr); public void update(Usuario usr); public void delete(Usuario usr); public Usuario findByLogin(); }

JDBC Exerccio
Criar tabelas e DAOs com os mtodos bsicos. Criar mtodos auxiliares (ex.: findByMatricula(int matricula) em AlunoDAO)

JDBC Referncias
JDBC API Tutorial and Reference

Maydene Fisher, John Ellis, Johnathan Bruce Editora Addison-Wesley, 1280 pginas 2003

JDBC Database Access, The Java Tutorial


http://java.sun.com/docs/books/tutorial/jdbc/

Dvidas?

david@jeebrasil.com.br http://del.icio.us/davidrvp http://www.jeebrasil.com.br

Você também pode gostar