2. Agenda
O que é JDBC
Características do JDBC
Drivers JDBC
Arquitetura do JDBC
Principais Insterfaces
Como usar o JDBC
JDBC Passo a Passo
Pratica I
Mais Sobre o ResultSet (Navegabilidade e Edição)
Pratica II
Controle de Transações com JDBC
Pratica III
3. Java Database Connectivity - JDBC
Java SE
Database Tecnologies
Java DB
Java Data Objects JDO
The Java Database Connectivity (JDBC)
JDBC é uma API (Conjunto de Classes e Interfaces)
presente no Java SE que encapsula a complexidade
da comunicação com SGBDs.
Enviar informações para um banco de dados
Receber informações de um banco de dados (Resultado
de Consultas)
Suporta DML e DDL, DCL e TCL*
4. Java Database Connectivity - JDBC
DML – Data Manipulation Language
DDL – Data Defination Language
DCL – Data Control Language
TCL – Transaction Control Language
COMMIT
ROLLBACK
* O JDBC implementa de forma
programática,
Através de métodos presentes na API.
5. Java Database Connectivity - JDBC
Outras características do JDBC
É multi-sgbd: suporta vários tipos gerenciadores de
banco de dados diferentes.
Suas Classes estão no pacote java.sql e javax.sql do
Java SE.
Os pacotes acima já estão embutidos no na plataforma
Java SE.
http://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/
Trata objetos do banco de dados (Tabelas, Linhas,
Colunas, Dados) como objetos java.
Utiliza-se de Drives para conectar a um SGBD específico.
6. Driver JDBC
O Que é um Driver?
Analogia: Um driver é um software que permite que o
computador se comunique com o hardware ou com os
dispositivos. Sem drivers, o hardware conectado ao
computador, por exemplo, uma placa de vídeo ou uma
impressora, não funcionará corretamente.
Driver JDB
Um driver JDBC é um componente de software que
permite que uma aplicação Java interaja com um banco
de dados. Para conectar com bancos de dados
individuais, o JDBC (a API Java Database Connectivity)
requer drivers para cada banco de dados. O driver JDBC
fornece a conexão ao banco de dados e implementa
o protocolo para transferir a consulta e o resultado entre
cliente e banco de dados.
9. Principais Intefaces do JDBC
Connection
Estabelece uma conexão com o Banco de Dados.
Statement
Envias as instruções para serem executadas no Banco
de Dados.
ResultSet
Implementa um cursor no banco de dados que possibilita
manipular os registros do resultado de uma consulta.
10. Como usar?
Baixar o Driver específico para o seu banco de
dados.
Adicionar o jar do Driver ao classpath da sua
aplicação.
No Eclipse: Project -> Properts -> Java Build Path ->
Libraries -> Add External JARs.
11. Passos do JDBC
Carregar o Driver
Conectar ao Banco de Dados
Executar a consulta SQL
(select/Insert/update/delete/ etc...)
Processar os resultados
Fechar a Conexão;
12. Passos do JDBC
Carregar o Driver
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
Conectar ao Banco de Dados
String url = “jdbc:mysql://localhost/dbname?user=login&password=xxxxx”
Connection conn = DriveManager.getConnection(url);
13. Passos do JDBC
Executar a consulta SQL
a) Criar o Statement:
Statment stmt= conn.createStatment();
Agora o obejeto stmt será usado para enviar instruções ao
banco de dados:
executeQuery() para SELECT
executeUpdate() para INSERT, UPDATE, DELETE
B) Enviar os Statements
stmt.executeQuery(“SELECT* FROM Pessoa”);
14. Passos do JDBC
Processar os resultados
a) Executando uma consulta:
ResultSetrs = stmt.executeQuery(“SELECT * FROM useres”);
while (rs.next()) {
String userId = rs.getString(“userId”) //nome da coluna
String firstName = rs.getString(2) //índice da coluna
int type = rs.getInt(“type”)
}
b) Inserindo uma linha:
int rows = stmt.executeUpdate(“INSERT INTO users VALUES(‘dinarte’, ‘Dinarte’,’Alves’,’123456’)”);
Fechar a Conexão:
rs.close(); //por padrão o resultset fecha automaticamentejunto com a instruçãode fechamento do statement.
stmt.close();
conn.close();
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
16. Mais Sobre o ResultSet
ResultSet é uma interface que representa uma Tabela do Banco de Dados.
Um objeto ResultSet é geralmente gerado pela a execução de um statment.
Por padrão um objeto ResultSet mantém um cursor posicionado na linha
atual dos dados, Inicialmente o cursos é posicionado antes da primeira
linha.
O método next move o cursor para a próxima linha e retorna false quando
não houver mais próxima linha.
É aconselhável o uso do While para interar sobre um ResultSet
Um ResultSet padrão não permite que os dados sejam editados e o cursor
só se movimenta para a frente.
Um ResultSet implementa a interface AutoCloseable, significa que ele fecha
automáticamente junto com a instrução de fechamento do Statement.
17. ResultSet Navegável e Editável
É possível obter um objeto do tipo ResultSet onde
pode-se andar com o sursor bidirecionalmente, além
de promover edição dos dados (Insert, Update,
Delete):
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM
TABLE2");
rs will be scrollable, will not show changes made by
others, and will be updatable.
18. ResultSet Navegável e Editável
Alteração de Dados via ResultSet
Inserção de Dados via ResultSet
20. Controle de Transações com JDBC
Muitas vezes precisamos executar várias instruções
SQL no banco de dados onde uma destas
instruções não fazem sentido sem a execução das
outras.
Geralmente isso acontece quando estamos
persistindo informações onde uma regra de negócio
foi aplicada como por exemplo:
Se eu processo uma venda no meu sistema de vendas,
eu tenho que executar as segintes operações:
Inserir um registro na entidade Venda.
Inserir um ou mais registros na entidade ItemVenda.
Alterar o campo qtd_estoque na Entidade Produto de acordo
com o numero de produtos vendidos nesta Venda.
21. Controle de Transações com JDBC
Recapitulando:
Inserir um registro na entidade Venda.
Inserir um ou mais registros na entidade ItemVenda.
Alterar o campo qtd_estoque na Entidade Produto de acordo com
o numero de produtos vendidos nesta Venda.
Perceba que no mundo real não faz sentido eu ter uma
venda que não possui produtos vendidos (ItemVenda),
também não faz sentido um ItemVenda sem que haja
uma Venda, Também não faz sentido alterar o meu
estoque se não houve venda ou items da venda.
Então, caso uma das operações não fossem
consolidadas isso geraria um grave problema de
Inconsistência de Dados
22. Controle de Transações com JDBC
Então devemos garantir que todas as operações envolvidas
nesta regra de negócio sejam executadas com sucesso, caso
uma delas apresente erro, as demais deveram ser desfeitas:
Tente{
Inserir um registro na entidade Venda.
Inserir um ou mais registros na entidade ItemVenda.
Alterar o campo qtd_estoque na Entidade Produto de acordo com o
numero de produtos vendidos nesta Venda.
Confirmar Operações.
} HouveAlgumErro{
Desfazer Tudo.
}
23. Controle de Transações com JDBC
Para executar todas as operações no banco?
commit
Para abortar todas as operações?
rollback
Então vamos lá!
Por padrão o Objeto Connection executa o commit das operações de forma
automática. Para assumirmos o controle das transações precisamos alterar este
comportamento:
conn.setAutoCommit(false);
try{
... Executar statement 1...
.. Executar statement 2...
.. Executar statement X...
conn.commit();
}cath(Exception e){
conn.rollback();
}