Вы находитесь на странице: 1из 45

XV Simpsio Brasileiro de Bancos de Dados 2-6 de Outubro de 2000 Joo Pessoa - Paraba, Brasil

Integrando Java e Banco de Dados (Tutorial) por Jorge Henrique Cabral Fernandes
Departamento de Informtica e Matemtica Aplicada Universidade Federal do Rio Grande do Norte

Contedo
Referncias Introduo O Modelo Computacional Um Exemplo Simples Elementos da API JDBC 1.0 Aspectos Avanados da API JDBC Exemplo de Sistema Three-Tier
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Referncias
JDBCTM - Connecting Java and Databases. Sun Microsystems, 1996 JDBC Database Access, by Maydene Fisher (Java Tutorial, Sun Microsystems, 1999) JDBC Home Page http://java.sun.com/products/jdbc

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

JDBCTM: Introduo
JDBC
Facilita a integrao entre programas Java e SGBDs Relacionais Suporta a execuo de comandos SQL atravs de uma API definida em Java.
Call Level Interface

Pacote java.sql, integrado ao ncleo do JDKTM

Aplicaes, Applets, Servlets ou quaisquer outros programas Java podem:


Estabelecer conexo com base de dados Enviar comandos SQL Processar resultados
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Modelo Computacional
Cliente Cliente
Aplicao next(); next();next(); get*(Col-n); get*(n); execQuery() getConn() execUpdate() createStmt() Col-1 Col-2 ... Col-n

Conn

Stmt

ResultSet

Servidor SGBD Relacional Bases de Dados


DriverMngr Driver JDBC API Java CORE APIs

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

JDBC 1.0

Um Exemplo Simples

Um Exemplo Simples

import java.sql.*; public class Select { static { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch ( ClassNotFoundException cnfe) { System.out.print(cnfe.toString()); } } public static void main(String[] args) { try { Connection conn = DriverManager.getConnection( "jdbc:odbc:Banco_de_Java", user", password"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT numero, saldo FROM contas"); System.out.println("Resultados da consulta"); while (rs.next()) { String numero = rs.getString(1); int saldo = rs.getInt(2); System.out.println(" Conta Bancria nmero:["+numero+"] Saldo:["+saldo+"]"); } stmt.close(); conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } System.exit(0); } }
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Principais Elementos da API JDBC Usados no Exemplo


Carregar Driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Estabelecer Connection
Connection connection = DriverManager.getConnection( "jdbc:odbc:BancodeJava" /*JDBC URL*/ ,"jorge","jhcf");

Criar Statement
Statement statement = connection.createStatement();

Executar Queries
ResultStatement result = statement.executeQuery( "SELECT * FROM contas WHERE numero =\'1\');

Executar Updates
statement.executeUpdate( "UPDATE contas SET saldo = 100 WHERE numero = \'1\'");

Fechar Statement e Connection


statement.close(); connection.close();

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

JDBC 1.0: pacote java.sql


Interfaces
Driver Connection DatabaseMetaData ResultSet ResultSetMetaData Statement
PreparedStatement
CallableStatement

Classes
java.util.Date
Date Time Timestamp

DriverManager DriverPropertyInfo Types

Excees
SQLException
SQLWarning
DataTruncation

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Classes do Exemplo
Driver DriverManager Connection Statement ResultSet SQLException

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Driver (interface)
Cria uma instncia e registra-se junto ao DriverManager quando a classe carregada Conecta-se a um tipo de SGBD especfico Principais Mtodos
boolean acceptsURL(String) Connection connect(String, Properties) boolean jdbcCompliant()

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Java, JDBC e JDBC Drivers


Aplicao Java JDBC DriverManager

JDBC Net Driver

JDBC-ODBC Bridge Driver ou Native API-Partly Java Driver

Native Protocol Pure Java Driver

ODBC & DB Drivers


Protocolo Middleware JDBC Protocolo ODBC e/ou Proprietrio Protocolo Proprietrio

SGBD Relacional JDBC Connector A B C

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Categorias de Drivers para JDBC


1 - JDBC-ODBC Bridge plus ODBC driver
ALL JAVA? No; Protocolo: Direct

2 - Native API partly-Java driver


ALL JAVA? No; Protocolo: Direct

3 - JDBC-Net pure Java Driver


ALL JAVA? Yes ; Protocolo: Requer Connector

4 - Native protocol pure Java Driver


ALL JAVA? Yes; Protocolo: Direct

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

DriverManager (classe)
Gerencia um conjunto de drivers JDBC disponveis. Testa qual deles mais apropriado para uma dada conexo Busca o nome dos drivers para carga na propriedade jdbc.drivers da classe System. Ex:
jdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver:wombat.sql.Driver

Principais Mtodos
Connection getConnection(String, String, String) registerDriver(Driver) get(set)LoginTimeout(int) get(set)LogStream(PrintStream)

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Connection (interface)
Representa uma sesso junto a uma base de dados especfica Gerencia a execuo de comandos (Statement) e o retorno de resultados (ResultSet) Por default, realiza um commit aps a execuo de cada Statement. Principais Mtodos
Statement createStatement(); close(), commit(), rooback(), setAutoCommit(boolean b) DatabaseMetaData getMetaData(); PreparedStatement prepareStatement(String sql); CallableStatement prepareCall(String sql);
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Statement
Executa comandos estticos SQL A cada momento, apenas um ResultSet por Statement Principais Mtodos
ResultSet executeQuery(String sql)
SQL statement SELECT

int executeUpdate(String sql)


SQL statement INSERT, UPDATE ou DELETE

close(); cancel(); get(set)MaxRows(); get(set)MaxFieldSize();

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

ResultSet
Tabela de dados gerada pela execuo de um comando executeQuery() Linhas so acessadas seqencialmente - next(); Colunas so acessadas em qualquer ordem
mtodos getXXX(int collumnIndex|String collName)
* getBoolean(), _Byte(), _Int(), _Float(), _Double(), Long(), Short(), String() byte[] getBytes() java.lang.BigDecimal getBigDecimal(); InputStream getBinaryStream() getMetaData();

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

SQLException
Informao sobre erro no acesso base de dados
String descrevendo o erro
getMessage()

SQLState - String no Padro XOPEN SQL


getSQLState()

Cdigo de erro especfico do fabricante


getErrorCode()

Link para prxima exceo, contendo informao adicional


getNextException()

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Banco de Java em JDBC

Arquitetura do Sistema
client.x.br
Controle da Aplicacao

server.dimap.ufrn.br Oracle:1721

createConta(...); getConta(...); setConta(...);


ContaBancaria BancoJDBC ContaBancaria

Banco_de_Java CONTAS
NUMERO 1 2 SALDO 50 0 -800

TCP/IP
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Funcionamento do Sistema BancoJDBC


Cliente Cliente (Applet/Servlet/Aplicao)
execQuery() getConn() execUpdate() createStmt() next(); BancoJDBC getInt(saldo);
numero saldo

...

...

Conn

Stmt

ResultSet

Server SGBD Relacional Bases de Dados


DriverMngr Driver JDBC API Java CORE APIs

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

O Banco de Java e JDBC


package BancoJDBC; import java.sql.*; import model.*; public class BancoJDBC { static { ...try {}} private String urlBancoDeDados = "jdbc:oracle:thin:@server.dimap.ufrn.br:1721:Banco_de_Java"; private String nomeUsuario = "jorge"; private String senhaUsuario = "jhcf"; private Connection conn; private Statement stmt; ...
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

O Banco de Java e JDBC (Continuao)


public BancoJDBC() {...} public void closeConnection() {...} public ContaBancaria getConta(String numeroConta) {...} private ContaBancaria getContaSQL(String numeroConta) {...} public boolean setConta(ContaBancaria conta) {...} private void setContaSQL(ContaBancaria conta) {...} public ContaBancaria createConta(String numeroConta) {...} private ContaBancaria createContaSQL(String numeroConta) {...}

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

public BancoJDBC()
public BancoJDBC() throws FalhaDeComunicacaoException { try { conn = DriverManager.getConnection(urlBancoDeDados, nomeUsuario, senhaUsuario); stmt = conn.createStatement(); stmt.getClass(); } catch (SQLException sqle) { throw new FalhaDeComunicacaoException(sqle); } }

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

public void closeConnection()


public void closeConnection() throws FalhaDeComunicacaoException { try { stmt.close(); conn.close(); } catch (SQLException sqle) { throw new FalhaDeComunicacaoException(sqle); } }

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

public ContaBancaria getConta(String numeroConta)


public ContaBancaria getConta(String numeroConta) throws ContaNaoExistenteException, FalhaDeComunicacaoException { ContaBancaria conta = null; try { conta = getContaSQL(numeroConta); return conta; } catch (SQLException sqle) { throw new FalhaDeComunicacaoException(sqle); } }

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

private ContaBancaria getContaSQL(String numeroConta)


private ContaBancaria getContaSQL(String numeroConta) throws SQLException, ContaNaoExistenteException { String comando = "SELECT * FROM contas "+ "WHERE numero = \'"+numeroConta+"\'"; ResultSet query = stmt.executeQuery(comando); if (query.next()) { ContaBancaria conta = new ContaBancaria(query.getString("numero")); conta.setSaldoAnterior(query.getInt("saldo")); return conta; } else { throw new ContaNaoExistenteException(numeroConta); } }
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

public boolean setConta(ContaBancaria conta)


public boolean setConta(ContaBancaria conta) throws FalhaDeComunicacaoException { this.setContaSQL(conta); }

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

private void setContaSQL(ContaBancaria conta)


private void setContaSQL(ContaBancaria conta) throws FalhaDeComunicacaoException { try { stmt.executeUpdate("UPDATE contas SET saldo = "+ conta.getSaldoAtual()+ " WHERE numero = \'"+conta.getNumero()+"\'"); } catch (SQLException sqle) { throw new FalhaDeComunicacaoException(sqle); } }

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

public ContaBancaria criaConta(String numeroConta)


public ContaBancaria createConta(String numeroConta) throws ContaExistenteException, FalhaDeComunicacaoException { try { return this.createContaSQL(numeroConta); } catch (SQLException sqle) { throw new FalhaDeComunicacaoException(sqle); } }

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Arquiteturas Multi-Camadas com JDBC, RMI, EJBs, Servlets, Applets e Browsers

Arquiteturas Two-Tier e Three-Tier com JDBC


Two-Tier (Duas Camadas)
Aplicao/Applet Java

Three-Tier (Trs Camadas)


Aplicao/Applet Cliente Java, HTML Browser

Cliente

java.sql

java.rmi, java.net ou java.idl


HTTP, RMI ou CORBA

Servidor de Aplicao
Middleware JDBC, ODBC ou Proprietrio

Business Objects java.sql


Middleware JDBC, ODBC ou Proprietrio

Servidor de SGBD SGBD Relacional A B C

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Arquiteturas Multi-Camadas com RMI


Two-Tier
Cliente Java Aplicao/Applet

Three-Tier
Cliente Java Aplicao/Applet

Three-Tier (Trs Camadas)


Aplicao/Applet Java, HTML Browser

java.rmi
Middleware RMI

java.rmi
Middleware RMI HTTP

java.net

java.rmi Objetos Distribudos

java.rmi Objetos Distribudos java.sql

javax.servlet Servlets java.rmi

SGBD Relacional A B C

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Arquiteturas Multi-Camadas com Servlets


Two-Tier
Cliente Java Aplicao/Applet, HTML Browser

Three-Tier
Cliente Java Aplicao/Applet, HTML Browser

N-Tier
Cliente Java Aplicao/Applet, HTML Browser

java.net
Middleware HTTP

java.net
Middleware HTTP HTTP

java.net

java.servlet Servlets

javax.servlet Servlets java.sql

javax.servlet Servlets java.net, javax.servlet

SGBD Relacional A B C

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Arquiteturas Multi-Camadas com Enterprise Java Beans (EJBs)


Two-Tier
Cliente Java Aplicao/Applet,

N-Tier
Cliente Java Aplicao/Applet

N-Tier
Cliente Java Aplicao/Applet, HTML Browser

java.rmi, javax.jndi
Middleware RMI, JNDI

java.rmi, javax.jndi
Middleware RMI, JNDI HTTP

java.net

javax.ejb EJBs

javax.ejb EJBs java.rmi, java.sql javax.jndi

javax.servlet Servlets java.rmi, javax.jndi

SGBD Relacional A B C

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Criar uma pequena aplicao na Web com HTML + Servlets + JDBC

Como Capturar Dados neste Formulrio HTML ...

E Mostrar Dados Consolidados em uma Pgina HTML!

Unindo Servlets e JDBC


Host #1 Web Browser
GET Survey.html POST surveyinsert GET surveyquery

Host #2

Servletrunner/HTTP Server
SurveyInsert Survey.html SurveyQuery

JDBC-ODBC Bridge Driver ou Native API-Partly Java Driver

Local ODBC Configuration

Host #3
ODBC Connector

Surveys survey1
employee comments ...

O Futuro de JDBC

O Futuro de JDBCTM
JDBC 1.0 (JDK 1.1) JDBC 2.0 (JDK 1.2) JDBC Standard Extensions
Heavy-duty DB Computing
SQL3 types Scrollable cursors programatic and batch updates Fundamental p/ Enterprise JavaBeans

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Aspectos Avanados de JDBC 2.0 - Batch Updates


try { Extrado de Jguru.com dbCon.setAutoCommit(false); Statement stmt= dbCon.createStatement(); stmt.addBatch("INSERT INTO bugs "+ "VALUES (1007, 'Server stack overflow', 1,2,{d '1999-01-01'})"); stmt.addBatch("INSERT INTO bugs "+ "VALUES (1008,'Cannot load DLL', 3,1,{d '1999-01-01'})"); stmt.addBatch("INSERT INTO bugs "+ "VALUES (1009,'Applet locks up',2,2,{d '1999-01-01'})"); int[] updCnt = stmt.executeBatch(); dbCon.commit(); } catch (BatchUpdateException be) { //handle batch update exception int[] counts = be.getUpdateCounts(); for (int i=0; I counts.length; i++) { System.out.println("Statement["+i+"] :"+counts[i]); } dbCon.rollback(); } catch (SQLException e) { //handle SQL exception dbCon.rollback(); }
Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Outras Referncias
Servlets Introduction to SQL Language
http://w3.one.net/~jhoffman/sqltut.htm

Jguru FAQ
http://www.jguru.com/jguru/faq/printablefaq.jsp?faq=JDBC

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

Prximos Passos
JDBC Tutorial da Sun Microsystems JDBC Guide Jguru FAQ Connection Pool Aspectos Avanados da JDBC 2.0

Java Deployment Course - JDBCTM: Integrando JavaTM e SQL. Copyright 2000, 1999, 1998. Jorge H. C. Fernandes. Todos os Direitos Reservados.

XV Simpsio Brasileiro de Bancos de Dados 2-6 de Outubro de 2000 Joo Pessoa - Paraba, Brasil

Integrando Java e Banco de Dados (Tutorial) por Jorge Henrique Cabral Fernandes
Departamento de Informtica e Matemtica Aplicada Universidade Federal do Rio Grande do Norte

Вам также может понравиться