18
1 Fundamentos de Fundamentos de JDBC JDBC 14 AULA AULA CENTRO FEDERAL DE EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

Embed Size (px)

Citation preview

Page 1: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

11

Fundamentos Fundamentos de JDBCde JDBC

14

AULAAULA

CENTRO FEDERAL DE EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RNTECNOLOGICA DO RN

Prof. Alessandro J. de Souza

Page 2: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

22

JDBC

JDBC é uma interface baseada em Java para acesso a bancos de dados através de SQL.

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.

Para usar JDBC é preciso ter um driver JDBC

Page 3: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

33

Tipos de Driver JDBC

Tipo 1: ponte ODBC-JDBC

O tipo 1 é um driver de ponte entre Java e ODBC.

O driver de ponte mais conhecido é o fornecido pela Sun o JDBC-ODBC

bridge.

Tipo 2: solução com código nativo

Usam uma API nativa. Esses drivers contém métodos Java

implementados em C ou C++.

Tipo 3: solução 100% Java no cliente

O tipo 3 é um driver totalmente Java que se comunica com algum tipo de

middleware que então se comunica com o banco de dados

Tipo 4: solução 100% Java

O tipo 4 é um driver totalmente Java que vai diretamente ao banco de

dados

Page 4: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

44

Tipos de Driver JDBC

Fonte- http://www.argonavis.com.br

Page 5: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

55

Como enviar consultas ao banco?

1. Carregar Driver JDBC;

2. Conectar a fonte de dados;

3. Executar declarações SQL;

Page 6: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

66

Carregar Driver JDBC

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

Isto pode ser feito com Class.forName():

Exemplo:

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

Class.forName(“org.postgresql.Driver");

Page 7: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

77

Conectar a fonte de dados

Conectar a fonte de dados 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:

jdbc:odbc: nome_fonte_de_dados

jdbc:postgresql://maquina:porta/nome_fonte_de_dados

Connection con = DriverManager.getConnection ("jdbc:odbc:banco",“usuário","senha")

A classe DriverManager manipula objetos do tipo Driver.

Page 8: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

88

Executar declaraões SQL

Existem três formas diferentes de executar declarações SQL:

Statement - Oferece meios de passar instruções SQL para o sistema de bancos de dados.

PreparedStatement – Declarações SQL semi-estáticas

CallableStatement - para chamada de stored procedures

Statement stmt = con.createStatement()

PreparedStatement pstmt = con.prepareStatement(...);

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

Page 9: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

99

Exemplo de uso de Statement

stmt.execute("CREATE TABLE pessoas "

+ "(codigo INT PRIMARY KEY, "

+ " nome CHAR(20), "

+ " cidade CHAR(20));");

int linhasModificadas =

stmt.executeUpdate("INSERT INTO pessoas "

+ "(codigo, nome, cidade) VALUES "

+ "(001, 'Carlos', 'natal')");

ResultSet cursor =

stmt.executeQuery("SELECT nome, cidade "

+ " FROM pessoas "

+ " WHERE codigo = 001");

Page 10: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1010

Exemplo de uso de 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 setTipo().

String sql = "INSERT INTO pessoas (codigo, nome, cidade)

VALUES(?, ?, ?)";

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setInt(1, 002);

pstmt.setString(2, "Alessandro");

pstmt.setString(3, "João Pessoa");

pstmt.executeUpdate();

Page 11: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1111

ResultSet

O método executeQuery(), da interface Statement, retorna um objeto ResultSet. Pode-se navegar pelas linhas da tabela recuperar as informações armazenadas nas colunas

Os métodos de navegação são next(): move uma linha para frente

previous(): move uma linha para trás

absolute(int n): move para alinha com número específico

first(): move para o primeiro registro

last(): move para o ultimo registro

....

ResultSet rs = stmt.executeQuery(sql);

While(rs.next()){

//processa dados ...

}

Page 12: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1212

Tipos Java / SQL e métodos de Acesso

Page 13: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1313

Exemplo de ResultSet

ResultSet rs =

stmt.executeQuery("SELECT * FROM pessoas");

while (rs.next()) {

int cod = rs.getInt("codigo");

String nome = rs.getString("nome");

String cidade = rs.getString("cidade");

// faça algo com os valores obtidos na consulta...

}

Page 14: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1414

Método Close() e Exceções

Após o uso, os objetos Connection, Statement e ResultSet

devem ser fechados através do método close():

conexão.close();

statement.close();

resultset.close();

A exceção SQLException é a principal exceção a ser

observada em aplicações JDBC

Try{

//comando de acesso ao banco

}cacth (SQLException ex) {

//tratamento de exceções

}finally{

//fechamento de conexões

}

Page 15: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1515

Exemplo de Persistência

public class Banco {

public static Connection conn = null;

public static Connection getConexao(){

try {

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

conn = DriverManager.getConnection("jdbc:odbc:testemy","SA","");

}catch (ClassNotFoundException exc) {

System.out.println("Error ao carregar o Driver");

} catch (SQLException ex) {

System.out.println("Probelmas ao abrir a conexao com o banco");

}

return conn;

}

Page 16: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1616

Exemplo de Persistência

public void salva(Pessoa pessoa) {

Connection conn = null;

PreparedStatement stmt = null;

ResultSet rs = null;

try {

conn = Banco.getConexao();

stmt = conn.prepareStatement("insert into tabela1 (nome,telefone, endereco) values (?, ?, ? )");

stmt.setString(1, pessoa.getNome().trim());

stmt.setString(2, pessoa.getTelefone().trim());

stmt.setString(3, pessoa.getEndereco().trim());

stmt.executeUpdate();

} catch (SQLException ex) {

System.out.println("Error fatal");

} finally {

Banco.closeConexao(conn, rs, stmt);

}

}

Page 17: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1717

Transações

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

Implementada através dos métodos de Connection

commit() – aplica mudanças no banco

con.commit();

rollback() – desfaz operações realizadas até o

momento

con.rollback();

setAutoCommit(boolean autoCommit): default é

true.

con.setAutoCommit(false);

Page 18: 1 Fundamentos de JDBC 14AULA CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RN Prof. Alessandro J. de Souza

1818

Construindo uma Aplicação web com acesso

a banco de dados