Java Acesso a Banco de Dados

33
Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc.

description

Java Acesso a Banco de Dados. Prof. Marcos André Pisching, M.Sc. Banco de Dados. Siglas: JDBC – Java Database Connectivity ODBC – Open Database Connectivity SQL – Structured Query Language DDL – data definition language DML – data manipulation language. - PowerPoint PPT Presentation

Transcript of Java Acesso a Banco de Dados

Page 1: Java  Acesso a Banco de Dados

Java Acesso aBanco de Dados

Prof. Marcos André Pisching, M.Sc.

Page 2: Java  Acesso a Banco de Dados

Banco de Dados Siglas:

JDBC – Java Database ConnectivityODBC – Open Database ConnectivitySQL – Structured Query Language

DDL – data definition language DML – data manipulation language

Prof. Marcos André Pisching, M.Sc. 2

Page 3: Java  Acesso a Banco de Dados

Banco de Dados

ProgramaJava

DriverJDBC

Servidor deBanco de

dados

Tabelas deBanco de

dados

Prof. Marcos André Pisching, M.Sc. 3

Page 4: Java  Acesso a Banco de Dados

JDBC

Page 5: Java  Acesso a Banco de Dados

JDBC JDBC é uma interface baseada em Java para acesso

a bancos de dados através de SQL. Pacote Java padrão: java.sql Baseada em ODBC

Usando JDBC, pode-se obter acesso direto a bancos de dados através de applets e outras aplicações Java

Nesta parte é apresentada uma introdução superficial do JDBC mas suficiente para integrar aplicações Java

com bancos de dados relacionais que possuam drivers JDBC

Prof. Marcos André Pisching, M.Sc. 5

Page 6: Java  Acesso a Banco de Dados

JDBC JDBC é uma interface de nível de código

Código SQL é usado explicitamente dentro do código Java O pacote java.sql consiste de um conjunto de classes e

interfaces que permitem embutir código SQL em métodos.

Com JDBC é possível construir uma aplicação Java para acesso a qualquer banco de dados SQL. O banco deve ter pelo menos um driver ODBC, se não tiver

driver JDBC

Para usar JDBC é preciso ter um driver JDBC O JSE distribui um driver ODBC que permite o acesso a

bancos que não suportam JDBC mas suportam ODBC

Prof. Marcos André Pisching, M.Sc. 6

Page 7: Java  Acesso a Banco de Dados

Pacote java.sql

Prof. Marcos André Pisching, M.Sc. 7

Page 8: Java  Acesso a Banco de Dados

Tipos de Drivers JDBC Tipo 1: ponte ODBC-JDBC

Usam uma ponte para ter acesso a um banco de dados. Este tipo de solução requer a instalação de software do lado do cliente.

Tipo 2: solução com código nativo Usam uma API nativa. Esses drivers contém métodos Java

implementados em C ou C++. Requer software no cliente. Tipo 3: solução 100% Java no cliente

Oferecem uma API de rede via middleware que traduz requisições para API do driver desejado. Não requer software no cliente.

Tipo 4: solução 100% Java Drivers que se comunicam diretamente com o banco de dados

usando soquetes de rede. É uma solução puro Java. Não requer código adicional do lado do cliente.

Prof. Marcos André Pisching, M.Sc. 8

Page 9: Java  Acesso a Banco de Dados

JDBC

Prof. Marcos André Pisching, M.Sc. 9

JDBC-ODBC Bridge

Solução com código nativo

Page 10: Java  Acesso a Banco de Dados

JDBC

Prof. Marcos André Pisching, M.Sc. 10

Solução 100%Java

Solução 100% Javano clienteDatabase Middleware

Page 11: Java  Acesso a Banco de Dados

Arquitetura JDBC

Prof. Marcos André Pisching, M.Sc. 11

Page 12: Java  Acesso a Banco de Dados

URL JDBC Uma aplicação JDBC pode carregar ao mesmo tempo diversos

drivers. Para determinar qual driver será usado usa-se uma URL:

jdbc:<subprotocolo>:<dsn> A aplicação usa o subprotocolo para identificar e selecionar o driver

a ser instanciado. O dsn é o nome que o subprotocolo utilizará para localizar um

determinado servidor ou base de dados. Sintaxe dependente do fabricante. Exemplos:

jdbc:odbc:anuncios

jdbc:oracle:thin:@200.206.192.216:1521:exemplo

jdbc:mysql://alnitak.orion.org/clientes

jdbc:cloudscape:rmi://host:1098/MyDB;create=true

Prof. Marcos André Pisching, M.Sc. 12

Page 13: Java  Acesso a Banco de Dados

DriverManager e Driver A interface Driver é utilizada apenas pelas implementações de

drivers JDBC É preciso carregar a classe do driver na aplicação que irá utilizálo.

Isto pode ser feito com Class.forName():

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

A classe DriverManager manipula objetos do tipo Driver. Possui métodos para registrar drivers, removê-los ou listá-los. É usado para retornar Connection, que representa uma conexão a

um banco de dados, a partir de uma URL JDBC recebida como parâmetro

Connection con =

DriverManager.getConnection

("jdbc:odbc:dados","nome","senha");

Prof. Marcos André Pisching, M.Sc. 13

Page 14: Java  Acesso a Banco de Dados

Connection, ResultSet e Statement Interfaces que contém métodos

implementados em todos os drivers JDBC. Connection

Representa uma conexão ao banco de dados, que é retornada pelo DriverManager na forma de um objeto.

Statement Oferece meios de passar instruções SQL para o sistema

de bancos de dados.

ResultSet É um cursor para os dados recebidos.

Prof. Marcos André Pisching, M.Sc. 14

Page 15: Java  Acesso a Banco de Dados

Statement Obtendo-se um objeto Connection, chama-se sobre

ele o método createStatement() para obter um objeto do tipo Statement:

Statement stmt = con.createStatement()

que poderá usar métodos como execute(), executeQuery(), executeBatch() e executeUpdate() para enviar instruções SQL ao BD.

Subinterfaces: PreparedStatement e CallableStatementPreparedStatement pstmt = con.prepareStatement(...);

CallableStatement cstmt = con.prepareCall(...);

Prof. Marcos André Pisching, M.Sc. 15

Page 16: Java  Acesso a Banco de Dados

Enviando instruções Exemplo de uso de Statement

stmt.execute("CREATE TABLE filme "

+ "(codigo INT PRIMARY KEY, "

+ "genero CHAR(20), "

+ “titulo CHAR(20));");

int linhasModificadas =

stmt.executeUpdate("INSERT INTO filme "

+ "(codigo, genero, titulo) VALUES "

+ "(499,‘Aventura',‘Frio de Lages')");

ResultSet cursor =

stmt.executeQuery("SELECT genero, titulo " +

" FROM filme " +

" WHERE codigo = 499");

Prof. Marcos André Pisching, M.Sc. 16

Page 17: Java  Acesso a Banco de Dados

ResultSet O método executeQuery(), da interface Statement,

retorna um objeto ResultSet. Cursor para as linhas de uma tabela. Pode-se navegar pelas linhas da tabela para recuperar as

informações armazenadas nas colunas

Os métodos de navegação são next(), previous(), absolute(), first() e last()

Métodos para obtenção de dados: getInt() getString() getDate() getApropriateDataType(), ...

Prof. Marcos André Pisching, M.Sc. 17

Page 18: Java  Acesso a Banco de Dados

Tipos JDBC e métodos getADT( )

Prof. Marcos André Pisching, M.Sc. 18

Page 19: Java  Acesso a Banco de Dados

Exemplo de ResultSet

Prof. Marcos André Pisching, M.Sc. 19

Page 20: Java  Acesso a Banco de Dados

Transações Permite a execução atômica de comandos enviados ao banco.

Implementada através dos métodos de Connection commit() rollback() setAutoCommit(boolean autoCommit): default é true.

Por default, as informações são processadas a medida em que são recebidas. Para mudar:

con.setAutoCommit(false); Agora várias instruções podem ser acumuladas. Para

processar:

con.commit(); Se houver algum erro e todo o processo necessitar ser desfeito,

pode-se emitir um ROLLBACK usando:

con.rollback();

Prof. Marcos André Pisching, M.Sc. 20

Page 21: Java  Acesso a Banco de Dados

PreparedStatement Statement pré-compilado que é mais eficiente quando várias

queries similares são enviadas com parâmetros diferentes String com instrução SQL é preparado previamente, deixando-

se "?" no lugar dos parâmetros Parâmetros são inseridos em ordem, com setXXX() onde XXX é

um tipo igual aos retornados pelos métodos de ResultSet

Prof. Marcos André Pisching, M.Sc. 21

Page 22: Java  Acesso a Banco de Dados

StoredProcedures Procedimentos desenvolvidos em linguagem proprietária do

SGBD (stored procedures) podem ser chamados através de objetos CallableStatement

Parâmetros são passados da mesma forma que em instruções PreparedStatement

Sintaxe con.prepareCall("{ call proc_update(?, ?, ...) }"); con.prepareCall("{ ? = call proc_select(?, ?, ...) }");

Prof. Marcos André Pisching, M.Sc. 22

Page 23: Java  Acesso a Banco de Dados

Fechar Conexão e Exceções Após o uso, os objetos Connection,

Statement e ResultSet devem ser fechados. Isto pode ser feito com o método close(): con.close(); stmt.close(); rs.close();

A exceção SQLException é a principal exceção a ser observada em aplicações JDBC

Prof. Marcos André Pisching, M.Sc. 23

Page 24: Java  Acesso a Banco de Dados

Implementação

Page 25: Java  Acesso a Banco de Dados

Banco de Dados Conectando-se ao banco de dados

Importar o pacote java.sql Criar objeto da classe Connection. Carregar o driver do banco de dados. DriverManager dará a conexão. Inicializar os strings: driver, url, username e

password.String driver = . . .;

String url = . . .;

String username = . . .;

String password = . . .;

Class.forName(driver); //carrega o driver

Connection conn =

DriverManager.getConnection(

url, username, password);

conn.close( );

Prof. Marcos André Pisching, M.Sc. 25

Page 26: Java  Acesso a Banco de Dados

BD – passos de uma implementação e conexão1) Escolher um banco de dados (MySQL,

SqlServer, Interbase, Firebird, Oracle, PostgreSQL, Access . . .)

2) Criar as tabelas do banco de dados relacional.

3) Instalar um driver do banco de dados para JDBC ou, um driver para ODBC-JDBC

4) Importar o pacote de classes e interfaces para o acesso ao banco de dados:

import java.sql.*;

Prof. Marcos André Pisching, M.Sc. 26

Page 27: Java  Acesso a Banco de Dados

BD – passos de uma implementação e conexão5) Estabelecer uma conexão

//captura de exceções SQLException em Java é obrigatória para usar JDBC

try {

// Registrando o driver JDBC para Firebird

Class.forName(“org.firebirdsql.jdbc.FBDriver”).getInstance( );

// Estabelecimento da conexão

Connection con = DriverManager.getConnection(

“jdbc:firebirdsql://[host]:[port]/meuBD”,”conta”,”senha”);

}

catch (SQLException e) {

e.printStackTrace();

}

Prof. Marcos André Pisching, M.Sc. 27

Page 28: Java  Acesso a Banco de Dados

BD – passos de uma implementação e conexão6) Executar comandos SQL

Statement stm = con.createStatement( );String SQL = “Select titulo, autor, total_faixas from MeusCDs”;

7) Interface ResultSet permite colher os resultados da execução de uma Query:ResultSet rs = stm.executeQuery(SQL); //Executa a query

while (rs.next( )) { // next informa se há resultado e posiciona na proxima linha

String tit = rs.getString(“titulo”); // getString – recupera uma string (campo titulo)

String aut = rs.getString(“autor”); int totalFaixas = rs.getInt(“total_faixas”);// rs.getString(“titulo”); // titulo é o campo da tabela de autores do banco de

dados //de livros

System.out.println(“Titulo: “ + tit + “ Autor: “ + aut + “ Tot. Faixas: “ + totalFaixas);

}

Prof. Marcos André Pisching, M.Sc. 28

Page 29: Java  Acesso a Banco de Dados

BD – passos de uma implementação e conexão8) Encerrando o statement:

// libera os recursos associados à execução desta consulta, mas deixa a// conexão aberta para a execução de uma próxima instrução

stm.close( );

9) Encerrando a conexão - connection:// implementar o finally do tratamento de exceção para abertura da conexãofinally {

try {con.close( );

}catch(SQLException se) {

System.out.println(“houve erro ao fechar a conexao”);se.printStackTrace( );

}}

Prof. Marcos André Pisching, M.Sc. 29

Page 30: Java  Acesso a Banco de Dados

BD – passos de uma implementação e conexão Modo geral de acesso aos drivers de banco

de dados:Connection conn = new Connection( );

// O Sun JDBC-ODBC bridge

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).getInstance( );

// IBM DB2

Class.forName(“COM.ibm.db2.jdbc.net.DB2Driver”).newInstance( ) ;

// Oracle 8i

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver( ));

Prof. Marcos André Pisching, M.Sc. 30

Page 31: Java  Acesso a Banco de Dados

Demonstrações

Page 32: Java  Acesso a Banco de Dados

Demonstrações

Netbeans Configurando drivers Estabelecendo uma conexão Criando banco de dados Acessando banco de dados Implementando uma classe de

Conexão

Prof. Marcos André Pisching, M.Sc. 32

Page 33: Java  Acesso a Banco de Dados

Demonstrações

Netbeans - Projetos AcessoBD ControleAlunos ControleFuncionariosCompletoSimplificado

Prof. Marcos André Pisching, M.Sc. 33