Vous êtes sur la page 1sur 18

Acesso a Bancos de Dados em Java (JDBC)

Jomi Fred Hbner


Universidade Regional de Blumenau Departamento de Sistemas e Computao

Roteiro

Introduo

Objetivo da JDBC Vantagens Viso geral do acesso a SGBDs

Drivers JDBC Conexo com o BD Envio de comandos e recebimento de resultados Informaes sobre o tipo da tabela Transaes

1. Introduo

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

Programa Java API JDBC

SGBD

Vantagens

a API para programao do sistema a mesma para qualquer SGBD, no h necessidade de se desenvolver aplicaes voltadas (e amarradas) para um BD especfico permite a construo de pginas WWW que acessam BD pois dispensa a configurao da mquina cliente mantm a independncia de plataforma da linguagem Java A aplicao roda em qualquer sistema operacional acessando qualquer BD !?

Viso geral

A API encapsula

o estabelecimento da conexo com o BD o envio de comandos SQL o processamento dos resultados

Exemplo
Connection con = DriverManager.getConnection ( "jdbc:odbc:sample", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT a, b, c FROM Table1"); while (rs.next()) { int x = getInt("a"); String s = getString("b"); float f = getFloat("c"); }

Comparao com Microsoft ODBC

ODBC tem o mesmo propsito e existe para vrias plataformas, por que no usar ODBC?

Os drivers ODBC so escritos em C, o que limita a portabilidade e auto-instalao dos programas Java 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, bancos de dados que utilizam ODBC podem ser utilizados em aplicaes Java via a ponte JDBC-ODBC.

Modelos de acesso ao SGBD

Arquitetura de duas camadas: cliente/servidor

Desvantagens aplicao Java api JDBC driver driver ponte oracle sybase ODBC
SQLNet TDS ODBC

servidor

o driver JDBC deve ser carregado no cliente se a aplicao for um applet, o SGBD deve estar na mesma mquina que o servidor Web

cliente

Oracle

SyBase

Access

Arquitetura de trs camadas

aplicao Java ou applet


RMI, CORBA, Socket, JDBC independente, ...

servidor middleware

Dispensa o cliente de conhecer o protocolo do SGBD e, consequentemente, carregar seu driver Melhora o tempo de resposta em aplicaes na Internet

cliente

servidor Java JDBC Dirvers

Oracle

SyBase

outros

2. Tipos de drivers JDBC


Ponte com ODBC Acesso ao driver nativo

a API JDBC chama procedimentos do driver nativo do SGBD instalado na mquina local a comunicao entre o cliente e a SGBD da-se no protocolo do SGBD, contudo, como o driver escrito em Java, dispensa a instalao/configurao do driver no cliente.

Driver com protocolo proprietrio escrito em Java

Driver independente de SGBD

utilizado pelo cliente para conectar-se com o middleware os dois primeiros tipos so recomendados para Intranets, pois exigem configurao da mquina cliente os outros dois podem ser utilizados na Internet, preferencialmente o ltimo, que tem menor tempo de download.

Carga do driver no programa Java

Vrios drivers podem ser carregados com o mtodo Class.forName. Por exemplo:

Class.forName ("oracle.jdbc.driver.OracleDriver"); Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");

a JVM deve poder encontrar estas classes

para aplicaes, a varivel de ambiente CLASSPATH deve incluir os drivers para applets, o parmetro archive deve apontar para o driver.

3. Conexo com o BD

A abertura da conexo feita pelo mtodo getConnection, que recebe uma URL (Universal Resource Location) como argumento O DriverManager tenta conectar com o primeiro driver carregado, se no consegue, tenta o driver seguinte JDBC URLs so formadas por: um protocolo (normalmente jdbc), um sub-protocolo (normalmente o tipo de driver) e informaes para o SGBD. ponte ODBC
Connection conn = DriverManager.getConnection ("jdbc:odbc:Sample", "admin", "temp"); // o servio Sample tem que estar configurado no // ODBC manager da mquina

protocolo nativo com driver Java


Connection conn = DriverManager.getConnection ("jdbc:mysql://host:1521/test?user=demo&password=sec");

4. Envio de comandos SQL


O envio de um comando SQL feito por meio de um Statement Um statement pode ser criado a partir de trs classes:

Statement utilizado para enviar comandos SQL simples PreparedStatement o comando SQL pr-compilado e utilizado posteriormente, sendo mais eficiente nos casos onde o mesmo comando utilizado vrias vezes CallableStatement utilizado para chamar procedimentos SQL armazenados no BD

A classe Statement

Um objeto desta classe criado pelo envio da mensagem createStatement conexo com o BD
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn = DriverManager.getConnection ("jdbc:odbc:Sample", "admin", "temp"); Statement stmt = conn.createStatement ();

Execuo de comandos SQL

mtodo executeQuery: usado para comandos SQL que retornam uma tabela
ResultSet rs = stmt.executeQuery("select * from EMP");

mtodo executeUpdate: usado para executar comandos SQL que alteram a tabela, retorna o nmero de colunas alteradas

5. Obteno do resultado

A classe ResultSet oferece aplicao a tabela resultante de um Select e mantm um cursor posicionado em uma linha da tabela. Inicialmente este cursor est antes da primeira linha e a mensagem next() movimenta o cursos para frente. Permite aplicao pegar os dados das colunas da linha corrente atravs de mensagem getXXX(<cloluna>). XXX o tipo da coluna <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");

Exemplo
import java.sql.*; class ExAcessoMySQLApp { public static void main (String args []) throws Exception { Class.forName ("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery ( "select ENAME from EMP"); while (rset.next ()) System.out.println (rset.getString(1)); } }

Meta dados de um ResultSet

Permite obter informaes sobre o tipo de tabela que resultou o select. Quais os nomes e os tipos das colunas Se a coluna do tipo numrico com sinal Se a coluna pode ser alterada ....

ResultSet result = stmt.executeQuery( "SELECT * FROM TabEx ORDER BY id DESC"); ResultSetMetaData meta = result.getMetaData(); int columns = meta.getColumnCount(); for (int i=1;i<=columns;i++) { System.out.println (meta.getColumnLabel(i) + "\t" + meta.getColumnTypeName(i)); }

Criao e insero numa tabela

Exemplo de criao e insero em uma tabela utilizando a mensagem executeUpdate ao Statement.

Statement st = con.createStatement(); st.executeUpdate( "create table Alunos ( nome varchar (32), idade integer);"); st.executeUpdate("insert into Alunos values ('Jonas',18);"); st.executeUpdate(update Alunos set idade = 18 where idade = 20"); con.close();

Transaes

Uma transao um conjunto de Statements que so validados no BD com commit ou cancelados com rollbabk

Por default, todos os comandos no JDBC so auto-commit.

con.setAutoCommit(false); // muda o default Statement s = con.createStatement(); try { s.executeUpdate("SQL statement 1"); s.executeUpdate("SQL statement 2"); con.commit(); con.rollback(); } // valida os 2 updates // seno, desfaz os updates } catch (Exception e) {

Vous aimerez peut-être aussi