Академический Документы
Профессиональный Документы
Культура Документы
1. O que é JDBC
O JDBC (Java Database Connectivity) é uma API Java para acesso a bancos de dados
relacionais através de SQL. Ele é inspirado no ODBC (Open Data Base Connectivity) e vale para
qualquer banco (dependente da disponibilidade de um driver). O pacote padrão é o “java.sql” e é
importante lembrar que para utilizá-lo é preciso conhecer os comandos SQL.
Boa parte da implementação dos recursos presentes no pacote “java.sql” é feita através
das classes presentes nos drivers JDBC. O pacote “java.sql” é um framework que é instanciado
pelos drivers associados a cada banco. Este framework oferece um padrão de comunicação com
as bases de dados, definindo interfaces para serem implementadas por quem queira construir um
driver para um SGBD específico, isto é, o framework dita as regras de “como construir um
driver”.
Para que um programa Java possa acessar um BD Relacional é necessário ter um driver
JDBC (que na realidade é um conjunto de classes disponibilizadas pelo fabricante do SGBD).
Estes drivers podem ser de quatro tipos, a saber:
O driver de Tipo 1 é o
que utiliza os recursos do
driver ODBC para o
acesso ao BD, este driver
é disponibilizado através
da “Java Runtime
Classes” que vem que
com o JDK;
O Driver de Tipo 2 é
aquele que acessa
diretamente o BD, mas
utiliza internamente uma
API disponibilizada pelo
SGBD. O código desta
API mistura Java e C Fig 1 - Tipos de Drivers JDBC.
(Código Nativo);
O driver deTipo 3 é aquele que foi feito totalmente em Java e para acessar o BD
utiliza uma infra-estrutura de middleware para se comunicar com o Servidor;
O driver de Tipo 4 é aquele que foi feito totalmente em Java e acessa o servidor
diretamente.
A figura 2 abaixo trás os padrões da API JDBC. O padrão atual para o JDBC é o 4.0.
Acesse o Painel de
Controle Ferra-
mentas Administra-
tivas Fontes de
Dados (ODBC);
Na guia “Fontes de
Dados de Usuário”,
conforme tela de-
monstrada na figura 3
ao lado, clique no
botão “Adicionar”;
Figura 3 – Tela “Fontes de dados (ODBC)
Para o estabelecimento de uma conexão com um BD, a partir da aplicação que você está
desenvolvendo, é necessário indicar qual driver esta aplicação deverá utilizar, a localização do
SGBD e o nome da base a ser utilizada. Para isto, devemos indicar uma URL JDBC com o
seguinte formato:
“jdbc:<subprotocolo>:<dsn>”
Exemplos:
a) jdbc:mysql://unigranrio.edu.br/base
b) jdbc:odbc:bdalunos
C) jdbc:oracle:thin:@102.20.34.13:1521:bdcorp
d) jdbc:postgresql://localhost:5432/bdalunos"
Para se estabelecer uma conexão é preciso, antes de tudo, carregar o driver JDBC que
será responsável pela comunicação com o SGBD. Para isto devemos utilizar a classe Class, que
é uma classe presente no pacote java.lang e possui o objetivo de descrever os metadados de uma
determinada classe (nome, atributos e métodos), e o seu método estático forName, que por sua
vez, serve para solicitar ao Class Loader da JVM a carga antecipada do bytecode de uma
determinada classe. Em outras palavras, utilizando “Class.forName(<nome do
driver>)” você solicita ao compilador que carregue as classes responsáveis por realizar as
operações com o banco de dados, que nada mais é do que o driver JDBC.
Exemplos:
import java.sql.*;
…
Connection conexao;
try{
// Carregando driver ODBC-JDBC
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Abrindo uma conexão com o via ODBC
conexao=DriverManager.getConnection("jdbc:odbc:Teste", conta,
senha);
// As transações serão efetivadas apenas após o commit
conexao.setAutoCommit(false);
}
Catch (ClassNotFoundException cnfe) {
System.out.println(“Não encontrado o driver JDBC-ODBC:"+
cnfe.getMessage( ) );
}
Catch (SQLExceptionsql e) {
System.out.println(“Erro na conexão: " + sqle.getMessage( ) );
}
Connection conexao;
...
try {
// Fechando a conexão
conexao.close( );
}
catch (SQLException sqle) {
System.out.println(“Erro no fechamento da conexão: "+
sqle.getMessage( ) );
}
import java.sql.*;
...
Connection conexao;
try{
// Criando o Comando SQL
PreparedStatement comando = conexao.prepareStatement(”INSERT
INTO ESTADO VALUES (?, ?, ?, ? ");
// Definindo os dados para a operação
comando.setString(1, “RJ”);
comando.setString(2, “Rio de Janeiro”);
comando.setString(3, “Rio de Janeiro”);
comando.setBigDecimal(4, new BigDecimal(10000000L));
// Executando a operação
comando.executeUpdate();
// Solicitando o Commit para efetivar a operação no BD
conexao.commit();
// Fechando o PreparedStatement e liberando recursos no banco
comando.close();
}
catch (SQLException sqle) {
System.out.println(“Erro na inserção:" + sqle.getMessage() );
}
import java.sql.*;
...
Connection conexao;
try{
// Criando o Comando
PreparedStatement comando = conexao.prepareStatement("UPDATE
ESTADO SET POPULACAO = ? WHERE SIGLA = ?");
// Definindo os parâmetros (dados) para a execução
comando.setBigDecimal(1, new BigDecimal(12500000L));
comando.setString(2, “RJ”);
// Executando
comando.executeUpdate();
// Solicitando o Commit
conexao.commit();
import java.sql.*;
…
Connection conexao;
try{
// Criando o Comando
PreparedStatement comando = conexao.prepareStatement(“DELETE FROM
ESTADO WHERE SIGLA = ?");
// Definindo os parâmetros
comando.setString(1, “GB”);
// Executando
comando.executeUpdate();
// Solicitando o Commit
conexao.commit();
// Fechando o PreparedStatement e liberando recursos no banco
comando.close();
}
catch(SQLException sqle) {
System.out.println(“Erro na inserção: " + sqle.getMessage( ) );
}
import java.sql.*;
…
Connection conexao;
try{
// Criando o Comando
Statement comando = conexao.createStatement( );
// Executando a consulta
ResultSet rs = comando.executeQuery(“SELECT * FROM ESTADO");
// Recuperando os dados
while(rs.next( ) ) {
System.out.println(“Sigla: “+ rs.getString(1));
System.out.println(“Nome: “+ rs.getString(2));
System.out.println(“Capital: “+ rs.getString(3));
System.out.println(“População: “l+ rs.getBigDecimal(4));
}
// Fechando o ResultSet e liberando recursos no banco ti
rs.close();
// Fechando o PreparedStatement e liberando recursos no banco
comando.close();
}
catch(SQLException sqle) {
System.out.println(“Erro na consulta: "+ sqle.getMessage( ) );
}