A04 - JDBC
A04 - JDBC
1 de 29 LPOO II – UFPR/SEPT
Conteúdo da aula
Conceitos Manipulação de Dados
1. SGBD 9. Inserindo Dados
2. SQL 10. Consultando Dados
3. JDBC 11. Atualizando Dados
4. Mapeamento de Tipos 12. Excluindo Dados
Conexão 13. Mapeamento de tipos principais
5. Classe Driver Manager 14. Fechando Recursos Automaticamente
6. Testar a conexão Fábrica de Conexões
7. Driver JDBC 15. Introdução
8. Testar a conexão 16. Implementação Simplificada
17. Implementação com propriedades em
arquivo
2 de 29 LPOO II – UFPR/SEPT
SGBD
◉ Sistema de gerenciamento de banco (SGBD) de dados é o conjunto de
software que fornece acesso gerenciado a uma base de dados,
responsabilizando-se por controlar, acessar, organizar e proteger as
informações de uma aplicação.
◉ Podem ser Relacionais (tabelas, linhas, colunas e registros) e Não-Relacionais
(sem estrutura definida previamente)
◉ Utilizaremos somente SGBDs relacionais nessa disciplina.
Utilizaremos o
◉ Capacidades de um SGBD: MySQL nessa
✓ Persistência Exemplos: disciplina.
✓ Capacidade de consulta • MySQL
✓ Concorrência • PostgeSQL
✓ Backup e replicação • SQL Server
✓ Imposição de regras • IBM DB2
✓ Segurança • Oracle
✓ Cálculos • MariaDB
✓ Registro em log de acessos e alterações
✓ Otimização automatizada
3 de 29 LPOO II – UFPR/SEPT
SQL
◉ SQL (Structured Query Language): É uma linguagem com sintaxe definida e padronizada entre
os SGBDs. Ela engobla os comandos para manipulação do conteúdo dados (inclusão, exclusão,
consultas e atualizações), da segurança dos dados e das estruturas dos dados em um SGBD.
SQL
5 de 29 LPOO II – UFPR/SEPT
SQL
6 de 29 LPOO II – UFPR/SEPT
JDBC
◉ O JDBC (Java Database Conectivity) é a API (conjunto de interfaces) do Java
que contém os elementos necessários para que uma aplicação Java possa
acessar SGBD relacionais;
✓ Utiliza extensivamente a SQL (Structured Query Language);
◉ Esta API é composta pelos pacotes java.sql e javax.sql, os quais fazem parte do
JavaSE;
◉ Com JDBC é possível:
✓ Conectar-se em uma fonte de dados, mais comumente o banco de dados
✓ Enviar queries e updates para o banco de dados
✓ Receber e processar os resultados provenientes de consultas aos bancos de dados
◉ Cabe ao programador escrever o código SQL que deverão especificar as
operações de consulta, inclusão, remoção ou alteração de dados;
7 de 29 LPOO II – UFPR/SEPT
JDBC
8 de 29 LPOO II – UFPR/SEPT
JDBC
9 de 29 LPOO II – UFPR/SEPT
Classe DriverManager
10 de 29 LPOO II – UFPR/SEPT
Classe DriverManager
◉ URL de Conexão
SGBDR URL
Derby jdbc:derby://hostname:1527/database
Firebird jdbc:firebirdsql://hostname:3050/database
HSQLDB jdbc:hsqldb:hsql://hostname:9001/database
ODBC jdbc:odbc:datasource
Oracle jdbc:oracle:thin@hostname:1526:database
MySQL jdbc:mysql://hostname/database
Postgre jdbc:postgresql://localhost/database
11 de 29 LPOO II – UFPR/SEPT
Testar a conexão
Máquina onde o
SGBD está Nome do Data Base Usuário e senha
executando.
◉ Passo 3:
Clique em “Download” para
o arquivo .zip
14 de 29 LPOO II – UFPR/SEPT
Driver JDBC
◉ Passo 4: Clique no link “No thanks, just start my download.”
15 de 29 LPOO II – UFPR/SEPT
Driver JDBC
◉ Passo 5: Procure pelo arquivo baixado.
◉ Passo 7: Copie esse arquivo para uma pasta qualquer. No passo seguinte usaremos esse
caminho para configurar o projeto do Netbeans. Nesse caso coloquei nessa pasta:
16 de 29 LPOO II – UFPR/SEPT
Driver JDBC
◉ Passo 8: Configurar o driver JDBC no ◉ Passo 9: Nas janela de propriedades
NetBeans. Abra o NetBeans e clique do projeto vá em “Libraries” e clique
com o botão direito do mouse em cima no botão “+” ao lado da palavra
do nome do projeto. Selecione a última Classpath. No menu que se abre
opção do menu: “Properties” clique em “Add JAR/Folder”.
17 de 29 LPOO II – UFPR/SEPT
Driver JDBC
◉ Passo 10: Encontre o arquivo na mesma ◉ Passo 11: Agora o driver (arquivo
pasta do passo 7. Clique em “Open” .jar) está configurado no caminho de
classes do projeto (classpath). Clique
em “OK”
18 de 29 LPOO II – UFPR/SEPT
Testar a conexão
19 de 29 LPOO II – UFPR/SEPT
Inserindo Dados
PreparedStatement permite
Obtém a conexão definir um comando SQL que
será pré-compilado no
Prepara o comando SGBDR, permitindo sua
execução eficiente;
Primeira linha
20 de 29 LPOO II – UFPR/SEPT
Consultando Dados
Obtém a conexão
Prepara o comando
Executa a query
O Resultset é um cursor
para o resultado da
consulta. O método next
Percorre o cursor do resultado
retorna true se a próxima
linha existe.
21 de 29 LPOO II – UFPR/SEPT
Atualizando Dados
Obtém a conexão
Prepara o comando
Executa o update
22 de 29 LPOO II – UFPR/SEPT
Excluindo Dados
Obtém a conexão
Prepara o comando
Executa o delete
23 de 29 LPOO II – UFPR/SEPT
Mapeamento de tipos principais
Tipo Java Tipo MySQL Método escrita Método Leitura
(Classe PreperadStatement) (Classe ResultSet)
java.lang.String VARCHAR void setString(int parameterIndex, String x) String getString(int columnIndex)
Exemplo: Exemplo:
stmt.setString(1, “Rafael”); String nome = rs.getString(1);
int INT void setInt(int parameterIndex, int x) int getInt(int columnIndex)
Exemplo: Exemplo:
stmt.setInt(1, 2); int id = rs.getInt(1);
long INT void setLong(int parameterIndex, long x) long getLong(int columnIndex)
Exemplo: Exemplo:
stmt.setLong(1,5L); long numero = rs.getLong(1);
double DOUBLE void setDouble(int parameterIndex, double x) double getDouble(int columnIndex)
Exemplo: Exemplo:
stmt.setDouble(1,5.5); double salario = rs.getDouble(3)
java.util.LocalDate DATE void setDate(int parameterIndex, java.sql.Date x) java.sql.Date getDate(int columnIndex)
Exemplo: Exemplo:
stmt.setDate(3, LocalDate data =
Date.valueOf(LocalDate.of(1976,8,15))); rs.getDate(4).toLocalDate()
24 de 29 LPOO II – UFPR/SEPT
Fechando recursos automaticamente
25 de 29 LPOO II – UFPR/SEPT
Padrão Factory para Conexão
◉ Encapsula a lógica de criação de objetos em uma classe separada,
conhecida como “fábrica”.
◉ Fornece uma maneira mais flexível e extensível de criar objetos,
sem a necessidade de expor diretamente a lógica de criação ao
código cliente.
◉ Abstrai os detalhes de conexão com diferentes bancos de dados,
usando uma interface comum para todos eles.
◉ Facilita a troca de bancos de dados sem alterar o código cliente,
apenas mudando a implementação da fábrica.
◉ Reduz a complexidade e o acoplamento do código cliente, que
só precisa solicitar os objetos à fábrica, sem se preocupar com a
sua criação.
26 de 29 LPOO II – UFPR/SEPT
Fábrica de Conexões: Implementação Simplificada
Construtor privado
para garantir que não
será instanciada.
Uso da fábrica de
conexões.
27 de 29 LPOO II – UFPR/SEPT
Fábrica de Conexões: Implementação com propriedades em arquivo
28 de 29 LPOO II – UFPR/SEPT
Fábrica de Conexões: Implementação com propriedades em arquivo
Por que ler os atributos de um arquivo .properties?
• Se houver modificação na URL de conexão, no dirver, no
usuário do banco de dados, na senha, você não precisará
recompilar o código.
• É uma boa prática de programação deixar as
configurações em um arquivo e não dentro do código.
Importante:
• Nossa classe ConnectionFactory ainda não está
preparada para uso em uma aplicação comercial.
• Teríamos que implementar métodos para controlar um
pool de conexões.
• Existem drivers que contém métodos prontos para isso.
Pode ocorrer
exceção ao ler
arquivo de
properties.
29 de 29 LPOO II – UFPR/SEPT