Você está na página 1de 18

CGU MPU - TCU

JAVA
Marcio Victorino
Prof. Marcio Victorino
www.dominandoti.com.br

JDBC - Java Database Connectivity

Prof. Marcio Victorino


www.dominandoti.com.br

JDBC conceito
JDBC uma API (Application Program Interface) para
acesso a SGBDs (Sistemas Gerenciadores de Banco
de Dados) relacionais por meio de comandos SQL
(Structured Query Language).

Programa Java (cliente)

protocolo

SGBD
SGBD

API JDBC

Prof. Marcio Victorino


www.dominandoti.com.br

JDBC vantagens
A API para programao do sistema a mesma para
qualquer SGBD. Por isso, no h necessidade de se
desenvolverem aplicaes voltadas para um SGBD
especfico, pois elas no esto atreladas a uma
arquitetura proprietria.
Com isso, fica assegurada a independncia de
plataforma de Java ("Write Once, Run AnywhereTM").
Permite a construo de pginas WWW dinmicas
que acessam BANCO DE DADOS.
Nenhuma configurao requerida no lado cliente.
Prof. Marcio Victorino
www.dominandoti.com.br

JDBC x Microsoft ODBC


Se ODBC tem o mesmo propsito e existe para
vrias plataformas, ento por que no us-lo ?
Os drivers ODBC so escritos em C, o que limita a
portabilidade e auto-instalao dos programas Java.
ODBC bem mais complexo para se aprender.
O ODBC tem que ser instalado e configurado na mquina
do cliente.
Imagine instalar e configurar o ODBC em 40.000.000
computadores da Internet!

Entretanto, banco de dados que utilizam ODBC podem


ser utilizados em aplicaes Java via a ponte JDBCODBC.
Prof. Marcio Victorino
www.dominandoti.com.br

JDBC Carga do driver


Vrios drivers podem ser carregados com o mtodo
Class.forName( String s). Por exemplo:
Class.forName (oracle.jdbc.driver.OracleDriver);
Class.forName (sun.jdbc.odbc.JdbcOdbcDriver);

- O ClassLoader tenta localizar e carregar uma instncia da

classe ou interface designada pela String s.


- A JVM deve poder encontrar a classe especificada. Caso
essa no seja encontrada, lanada uma exceo
ClassNotFoundException.
- Para aplicaes, a varivel de ambiente CLASSPATH
deve incluir os drivers.
Prof. Marcio Victorino
www.dominandoti.com.br

JDBC 4 tipos de drivers


1. Ponte com ODBC : o tipo provido pela Sun. Apropriado
para uso experimental e para situaes na qual no haja
nenhum outro driver disponvel.
2. Driver independente de SGBD: converte chamadas JDBC
em chamadas API do cliente para Oracle, Sybase,
Informix, DB2 ou outro SGBD.
3. Acesso ao driver nativo: a API JDBC chama
procedimentos do driver nativo do SGBD instalado na
mquina local.
4. Driver com protocolo proprietrio escrito em Java: a
comunicao entre o cliente e o SGBD d-se no protocolo
do BD, contudo, como o driver escrito em Java, dispensa a
instalao ou configurao do driver no cliente.
Prof. Marcio Victorino
www.dominandoti.com.br

JDBC Conexo com o BD


A abertura da conexo (sesso) feita pelo mtodo
getConnection da classe DriverManager (o servio bsico
para gerenciamento de um conjunto de drivers JDBC).
getConnection(String url)
getConnection(String url, String user, String password)
getConnection(Stringurl, Propertiesinfo)
- Retorna um objeto do tipo Connection.
- A URL composta de protocolo:subprotocolo:subnome.
- O DriverManager tenta conectar com o primeiro driver carregado; se

no consegue, tenta o driver seguinte.


- Caso no seja localizado, lanada uma exceo SQLException.
- Properties: um objeto de coleo do tipo Hashtable (chave e valor),
podendo ser usado para definir, dentre outras coisas, o usurio e a senha.
Prof. Marcio Victorino
www.dominandoti.com.br

JDBC Conexo com o BD


A classe Connection
public abstract void setAutoCommit(boolean
autoCommit) throws SQLException: determina o modo
de commit conforme o parmetro.
public abstract void commit() throws
SQLException: confirma todas as mudanas feitas at o
ponto e libera todos os bloqueios efetuados pela conexo
atual.
public abstract void rollback() throws
SQLException: desfaz todas as mudanas feitas at o
ponto e libera todos os bloqueios efetuados pela conexo
atual.
Prof. Marcio Victorino
www.dominandoti.com.br

JDBC Conexo com o BD


A classe Connection
public abstract void close() throws SQLException:
fecha a conexo e libera todos os recursos JDBC
imediatamente.
public abstract DatabaseMetaData getMetaData()
throws SQLException:obtm metadados sobre a conexo
atual.
public abstract Statement createStatement() throws
SQLException:cria o comando JDBC a partir da conexo
atual.

Prof. Marcio Victorino


www.dominandoti.com.br

10

JDBC Conexo com o BD


import java.sql.*;
. . .
java.util.Properties props = new Properties();
props.put("user", objAccessManager.getConta());
props.put("password", objAccessManager.getSenha());
String url = "jdbc:odbc:temp//"+ "fava" +":6024/" +
bancoDeDados;
try
{
// carrega o driver da ponte jdbc-odbc
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// abre conexao com o banco de dados
Connection con = DriverManager.getConnection(url, props);
// Este banco no aceita autocommit
//con.setAutoCommit( false ); //se o BD lida com transao
}
//Continua ...
Prof. Marcio Victorino
www.dominandoti.com.br

11

JDBC Conexo com o BD


catch(ClassNotFoundException e) //Class.forName()
{
System.out.println("Classe do Driver JDBC no
encontrada");
}
catch(SQLException e) //DriverManager.getConnection()
{
System.out.println(
"Falha na conexo com o banco de dados:" );
System.out.println(e.getMessage();
}
//FIM.

Prof. Marcio Victorino


www.dominandoti.com.br

12

JDBC Criao do Statement


Esta classe objetiva-se a executar um comando SQL e a obter o
resultado produzido por esse.
Apenas um ResultSet (resultado SQL) pode ser aberto a cada vez.
Um objeto desta classe criado pelo mtodo createStatement a
partir da conexo j estabelecida.
Statement stmt = con.createStatement( );

Prof. Marcio Victorino


www.dominandoti.com.br

13

JDBC a classe Statement


Dois dos seus principais mtodos so:
- ResultSet executeQuery(String sql): usado para
comandos SQL que retornam uma nica tabela
(ResultSet), tipicamente o SELECT.
- int executeUpdate(String sql): usado para executar
comandos SQL que alteram a tabela (CREATE, INSERT,
UPDATE ou DELETE). Retorna o nmero de colunas
alteradas.

Prof. Marcio Victorino


www.dominandoti.com.br

14

JDBC Envio de comandos SQL


O envio de um comando SQL feito por intermdio dos

mtodos executeQuery(String s) e executeUpdate(String s)


de um Statement, da seguinte forma:
- executeQuery:
ResultSet rs = stmt.executeQuery
(SELECT * FROM Alunos);

- executeUpdate:
stmt.executeUpdate (CREATE TABLE Alunos
(nome VARCHAR(32), idade INTEGER););
stmt.executeUpdate (INSERT INTO Alunos
VALUES(Jonas, 18););

Prof. Marcio Victorino


www.dominandoti.com.br

15

JDBC Envio de comandos SQL


Obteno do resultado
A classe ResultSet oferece aplicao a tabela resultante de um
SELECT.
- Mantm um cursor posicionando em uma linha da tabela. De incio, esse
cursor est posicionado antes da primeira linha. O mtodo next( ) que
movimenta o cursor para o prximo registro.
- Permite aplicao capturar os dados de cada coluna da tupla (linha)
corrente atravs do mtodo getXXX(<coluna>), onde XXX o tipo da
coluna e <coluna> o nome da coluna ou sua posio (a partir de 1).
ResultSet rs = stmt.executeQuery (
select a, b, c from table1);
while (rs.next ( )) {
int x
= rs.getInt(a);
String s = rs.getString(2);
float f
= rs.getFloat(c);
}
Prof. Marcio Victorino
www.dominandoti.com.br

16

JDBC - Transaes
Uma transao um conjunto de um ou mais comandos que so
executados juntos como uma unidade: se no for possvel que
todos sejam executados, ento nenhum deles ser executado.
Uma transao um conjunto de Statements que so validados no
BD com commit ou cancelados com rollback.
Transaes podem ajudar a preservar a integridade dos dados de
uma tabela.
Por default, todos os comandos no JDBC so auto-commit.
con.setAutoCommit(false); // muda o default
Statement stmt = con.createStatement();
stmt.executeUpdate(...);
stmt.executeUpdate(...);
if (...) con.commit();
else
con.rollback();

//se Ok, valida os 2 updates


//seno, desfaz os updates

Prof. Marcio Victorino


www.dominandoti.com.br

17

CGU MPU - TCU

Fim
Prof. Marcio Victorino
www.dominandoti.com.br

18

Você também pode gostar