JDBC - Tecjorge

Propaganda
JDBC

Compreender os conceitos básicos da
utilização do acesso a banco de dados
via JDBC
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC





Conceitos;
Arquitetura;
Processo básico de utilização;
Classes e interfaces JDBC;
Exemplo prático;
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC

JDBC- Java Database Connectivity


É um conjunto de interfaces definidas no Java
para construção de componentes de acesso a
bancos de dados.
Esse conjunto de interfaces que devem ser
implementadas por componentes de acesso a
um determinado banco de dados.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC

JDBC- Java Database Connectivity


Com JDBC é possível construir uma
aplicação Java para acesso a qualquer
banco de dados SQL.
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
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC

Arquitetura JBDC:
SQL-Server,
MySql, entre
outros.
Aplicação JAVA
Interface JDBC
Implementação JDBC.BANCO
SGBD
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC

Processo básico para utilizar o JDBC

Carregar e registrar o driver JDBC junto ao Driver
Manager;
Configurar e obter uma conexão com o banco de dados;
Preparar os dados para consulta (formatação, ordenação,
...) e o próprio SQL;
Executar a consulta;
Obter e verificar os resultados;
Tratar possíveis erros;
Formatar a saída para o usuário;

Ao finalizar a aplicação, fechar a conexão.






Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - 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;
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - DriverManager e Driver

É usado para retornar Connection, que
representa uma conexão a um banco de
dados, a partir de uma URL JDBC recebida
como parâmetro:
Nome do DSN registrado, se fizer conexão ODBC
Connection con =
DriverManager.getConnection(
"jdbc:odbc:aluguel","", "");
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Connection:


Representa uma conexão ao banco de dados,
que é retornada pelo DriverManager na forma de
um objeto.
Sendo possíveis algumas operações:
con.commit();
 con.rollBack();
 con.close();

Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Statement:



Oferece meios de passar instruções SQL para o
sistema de banco de dados.
Obtendo-se um objeto Connection, chamamos o
seu método createStatement() para obter uma
instância de uma classe que implementa a
interface Statement:
 Statement stmt = con.createStatement();
A interface Statement é usada para executar
comando SQL simples.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Statement:

Com um objeto do tipo Statement podemos
utilizar os métodos execute, executeQuery e
executeUpdate que são usados da seguinte
maneira:

stmt.execute(
"CREATE TABLE produto(id_produto INT
PRIMARY KEY, descricao CHAR(20),
fabricante char(20)); ");
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Statement:
int linhasModificadas =
stmt.executeUpdate(
" INSERT INTO produto
(id_produto, descricao, fabricante)
VALUES
(1,‘PNEU',‘firestone’)
");


O retorno do método indica o status da
operação.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Statement:

Consultas que retornam dados são executadas
usando o executeQuery:

ResultSet rs = stmt.executeQuery("SELECT * FROM
Produto");
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Comandos pré-compilados:



O Statement pré-compilado que é mais eficiente
quando várias consultas similares são enviadas
com parâmetros diferentes
Uma String com instrução SQL é preparada
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.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Comandos pré-compilados:
String newSql = "INSERT INTO PRODUTO
(nom_produto, des_produto, fornecedor)
VALUES (?, ?, ?)";
PreparedStatement stmt1 = con.prepareStatement(newSql);
stmt1.setString(1, "Monitor");
stmt1.setString(2,"Monitor LCD");
stmt1.setString(3, “SAMSUNG");
stmt1.executeUpdate();
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

ResultSet:




É um cursor para os dados recebidos.
Conforme
demonstrado,
o
método
executeQuery() retorna um objeto do tipo
ResultSet;
Com esse cursor recuperado, pode-se então
navegar pelas linhas da tabela e recuperar as
informações
armazenadas
nas
colunas
solicitadas na consulta.
Alguns métodos para navegação são:

Next(); previous(); First() e last().
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

ResultSet:

Para obtenção dos dados são utilizados os
seguintes métodos:



getInt();
getString()...
Ou seja, getXXX() onde XXXX é o tipo da informação
recuperada.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

ResultSet:

Supondo que em uma tabela exista 3 atributos:


A Tabela Produtos que foi mostrado anteriormente.
Então usaremos os métodos getInt() e o
getString()



objetoReultset.getInt(“id_produto”)
objetoReultset.getString(“descricao”)
objetoReultset.getString(“fabricante”)
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

ResultSet:


Os métodos getXXXX() possuem duas
sobrecarga.
Onde pode ser Passado como parâmetro o nome
do atributo da tabela ou o número da ordem de
criação do atributo (índice do atributo)



objetoReultset.getInt(1)
// Para o atributo id_produto
objetoReultset.getString(2) // Para o atributo descricao
objetoReultset.getString(3) // Para o atributo abricante
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Propriedades transacionais:


Possibilita maior segurança na atualização dos
dados.
Temos que lançar a exceção (throws SQLException).

Também fazer o tratamento de erro.
connection.setAutoCommit(false);
PreparedStatement pst = connection.prepareStatement( SuaQuery );
..
pst.executeUpdate() //Várias alterações no BD.
...
connection.commit();
ou
connection.rollback();
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
JDBC - Connection, ResultSet e Statement

Propriedades transacionais:
String sql = "INSERT INTO clientes (NOME, ENDERECO, BAIRRO, CIDADE) VALUES (?, ?, ?, ?)";
try {
connection.setAutoCommit(false);
PreparedStatement pst = connection.prepareStatement( sql );
pst.setString(1, "Carlos Teste 1");
pst.setString(2,"Endereço de Carlos Teste 1");
Faz duas alterações no banco de
pst.setString(3,"Bairro Carlos Teste 1");
dados.
pst.setString(4,"Cidade Carlos Teste 1");
pst.executeUpdate();
Só então, caso não haja erros ele
sql = "UPDATE clientes SET NOME=? WHERE Codigo=?";
pst = connection.prepareStatement( sql );
pst.setString(1, "Jorge");
pst.setInt(2, 4);
pst.executeUpdate();
Caso
connection.commit();
Confirma todas al alterações, de
fato, no banco
ocorra algum erro ele desfaz
as alterações, voltando ao
estado, seguro, original
pst.close();
} catch(SQLException e) {
System.err.println ("\nError Menssage: " + e.getMessage());
connection.rollback();
}
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI)
Especialista : Sistema distribuídos (UFBA)([email protected])
Download