java - introdução a banco de dados
DESCRIPTION
Aula topico 1 topico 2TRANSCRIPT
![Page 1: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/1.jpg)
Java - Introdução a banco de dadosProf: Sérgio Souza Costa
![Page 2: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/2.jpg)
Sobre mim
Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
![Page 3: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/3.jpg)
Introdução
• Sistemas computacionais compartilham algumas necessidades comuns
– Armazenar e recuperar informação (persistência)
– Interagir com o usuário
![Page 4: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/4.jpg)
Introdução
• Sistemas computacionais compartilham algumas necessidades comuns
– Armazenar e recuperar informação (persistência)
– Interagir com o usuário
![Page 5: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/5.jpg)
Persistência
Armazenar e recuperar informações eficientemente é em si um grande desafio.
![Page 6: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/6.jpg)
Persistência
• Armazenar e recuperar informações eficientemente é em si um grande desafio.
• Nossas aplicações precisam resolver outros desafios específicos do problema.
• Persistência é um serviço oferecido por diversas empresas e instituições, como Oracle, Microsoft, GNU ( MySQL, Postgres) ..
![Page 7: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/7.jpg)
JDBC
O Java disponibiliza o JDBC, um framework para acesso a diferentes servidores de Banco De Dados:
![Page 8: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/8.jpg)
Tutorial
![Page 9: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/9.jpg)
Primeiro desafio. Fazer uma agenda de contatos.
![Page 10: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/10.jpg)
Onde você irá salvar os dados ?
![Page 11: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/11.jpg)
Usarei um servidor de banco de dados, que é uma aplicação especializada para armazenar e recuperar dados
![Page 12: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/12.jpg)
CREATE TABLE contato (
email text, nome text, telefone text
);
Primeiro, criar um banco e uma tabela em um dado SGBD. Por exemplo:
![Page 13: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/13.jpg)
Como minha aplicação irá acessar o servidor ?
![Page 14: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/14.jpg)
Em outras linguagens faço assim:1. Abro uma conexão com o meu servidor
de banco de dados 2. Depois uso o SQL para recuperar e
armazenar dados.
![Page 15: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/15.jpg)
Porém, como fazer isso no Java ?Preciso pesquisar.
![Page 16: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/16.jpg)
Pesquisando ...
![Page 17: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/17.jpg)
Alguns minutos depois ...
![Page 18: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/18.jpg)
Connection conn;String url = "jdbc:postgresql://localhost/contatos?user=postgres&password=postgres";try { conn = DriverManager.getConnection(url); System.out.println("conectado"); } catch(SQLException excecao) { throw new RuntimeException(excecao); }
Já sei como abrir uma conexão, mas não está funcionando :(
![Page 19: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/19.jpg)
https://jdbc.postgresql.org/download/postgresql-42.1.1.jre6.jar
Faltou adicionar o drive do postgresql. Baixe no link abaixo:
![Page 20: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/20.jpg)
Vá em propriedades do projeto, e depois aba “libraries”
![Page 21: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/21.jpg)
Depois, click em “Add External JARs”
![Page 22: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/22.jpg)
Biblioteca já adicionada.
![Page 23: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/23.jpg)
Agora preciso saber como executar um SQL através do Java
![Page 24: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/24.jpg)
Pesquisando ...
![Page 25: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/25.jpg)
Alguns minutos depois ...
![Page 26: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/26.jpg)
Já sei executar um SQL no servidor
String sql = "INSERT INTO contato(nome,email, telefone) VALUES(?,?, ?)"; try { PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, "sergio"); stmt.setString(2, "[email protected]"); stmt.setString(3, "123"); stmt.execute(); stmt.close(); System.out.print("inserido"); } catch (SQLException u) { throw new RuntimeException(u); }
![Page 27: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/27.jpg)
Recuperar é o mesmo procedimento1. Abro uma conexão com o meu servidor
de banco de dados 2. Depois uso o SQL para recuperar os
dados .3. Depois manipula o resultado,
normalmente armazenado em um resultset
![Page 28: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/28.jpg)
Pesquisando ...
![Page 29: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/29.jpg)
Alguns minutos depois ...
![Page 30: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/30.jpg)
String sql = "select * from contato"; try { PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { System.out.println("Nome:"+rs.getString("nome")); System.out.println("Email:"+rs.getString("email")); } stmt.close(); } catch (SQLException u) { throw new RuntimeException(u); }
![Page 31: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/31.jpg)
O que acharam das minhas aplicações Java ?
Podem testar funciona ☺
![Page 32: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/32.jpg)
Funciona … porém não está utilizando os recursos da programação orientada a objetos
![Page 33: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/33.jpg)
Em Java, nós usamos orientação objeto, você precisa pesquisar mais sobre este paradigma.
![Page 34: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/34.jpg)
Como vocês resolveriam este problema ?
![Page 35: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/35.jpg)
OK. Vou pesquisar mais um pouco ....
![Page 36: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/36.jpg)
Pesquisando ...
![Page 37: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/37.jpg)
Alguns minutos depois ...
![Page 38: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/38.jpg)
Entendi, eu crio classes que definem responsabilidades.
Então já sei como melhorar minha aplicação
![Page 39: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/39.jpg)
public class Contato {
private String nome; private String email;private String phone;
public Contato(String n, String e, String p) {this.nome = n;this.email = e;this.phone = p;
}public void salvaNoBanco () {….}
}
Faço uma classe contato que é responsável por salvá-la no banco ☺
![Page 40: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/40.jpg)
public class CadastraContato {
public static void main(String[] args) {Contato contato = new Contato (”sergio",
[email protected], “123”);contato .salvaNoBanco();
}
}
Depois basta instanciar um objeto e executar o método salvaNoBanco
![Page 41: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/41.jpg)
Agora a solução ficou boa né ?
O que vocês acham ?
![Page 42: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/42.jpg)
Está melhor, mas você não devia misturar codigo específico de banco de dados dentro da sua classe contato.
![Page 43: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/43.jpg)
Ja OUVIU falar em POJO (Plain Old Java Objects) ?Mantenha sua classe contato simples, e delegue operações de banco de dados para outra classe
![Page 44: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/44.jpg)
Esses desenvolvedores, nunca estão satisfeitos. Vou pesquisar mais um pouco
![Page 45: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/45.jpg)
Pesquisando ...
![Page 46: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/46.jpg)
Alguns minutos depois ...
![Page 47: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/47.jpg)
Acho que já sei como resolver
1. Crio uma classe POJO2. Depois outra classe para
salvar no banco
![Page 48: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/48.jpg)
public class Contato {
private String nome; private String email;private String telefone;
String getNome() {return nome;
}void setNome(String nome) {
this.nome = nome;}….
}
Minha classe POJO
![Page 49: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/49.jpg)
public class ContatoDAO {private Connection connection;private String url =
"jdbc:postgresql://localhost/contatos?user=postgres&password=postgres";
public ContatoDAO() {try {
conn = DriverManager.getConnection(url); System.out.println("conectado"); } catch (SQLException excecao) {
throw new RuntimeException(excecao);}
}public void adiciona(Contato Contato) {….}
}
Minha classe DAO que salva no banco … abrindo conexão
![Page 50: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/50.jpg)
public void adiciona(Contato Contato) {String sql = "INSERT INTO Contato(nome,email,telefone) VALUES(?,?,?)”try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, Contato.getNome());stmt.setString(2, Contato.getEmail());stmt.setString(3, Contato.getTelefone());stmt.execute();stmt.close();
} catch (SQLException u) {throw new RuntimeException(u);
}}
O Método que salva um contato no banco.
![Page 51: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/51.jpg)
public class CadastraContato {public static void main(String[] args) {
Contato contato = new Contato();contato.setNome("sergio");contato.setEmail("[email protected]");contato.setTelefone("123");ContatoDAO dao = new ContatoDAO();dao.adiciona(contato);
}}
Então minha aplicação cliente precisa apenas ….
![Page 52: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/52.jpg)
Parabéns ! Ficou muito melhor.
![Page 53: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/53.jpg)
ATIVIDADE: Modifiquem a classe ContatoDAO, para permitir a recuperação dos dados.
O método irá retornar uma coleção de Contatos:
public List<Contato> recuperarContatos() {// codigo aqui
}
![Page 54: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/54.jpg)
LaboratórioUm aplicativo de “Cadastro de Contatos” em Swing
![Page 55: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/55.jpg)
Cadastro de contatos
• Montem a seguinte interface.
• Alterem o nome das variáveis referentes as caixas de textos e botões.
• Usem nomes sugestivos e sigam um “padrão”. Exemplo, btnCadastrar, btnLimpar, txtNome, txtEmail
![Page 56: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/56.jpg)
Codifiquem a ação “Sair”, similar ao que fizemos na aulas sobre interface gráfica
![Page 57: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/57.jpg)
Evitando fechamento acidental. Peça uma confirmação do usuário.
![Page 58: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/58.jpg)
O Java oferece uma classe que cria este tipo de “caixas”, de mensagem, confirmação e entrada de
usuário.
private void btnSairActionPerformed(java.awt.event.ActionEvent evt)
{int confirm = JOptionPane.showConfirmDialog (this,
"Deseja Realmente fechar a aplicação?", "Sair - Confirmação",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (confirm == JOptionPane.YES_OPTION) { System.exit(1); }}
![Page 59: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/59.jpg)
JOptionPane.showMessageDialog (null,"Montando uma caixa de Dialogo sem ícone","Mensagem",JOptionPane.PLAIN_MESSAGE );
int opcao = JOptionPane.showConfirmDialog (null,"Deseja terminar ?","Mensagem Final",JOptionPane.YES_NO_OPTION ,JOptionPane.QUESTION_MESSAGE )
String numero=JOptionPane.showInputDialog (null,"Digite uma informação qualquer”,"Entrada de dados",JOptionPane.QUESTION_MESSAGE );
![Page 60: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/60.jpg)
Defina o “mnemonic” para cada botão. Facilita o uso direto pelo
teclado.
![Page 61: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/61.jpg)
Codifique a ação limpar, como fizemos em aula passada.
![Page 62: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/62.jpg)
Codifique a ação cadastrar. No fim da ação, mostre uma mensagem para o usuário que foi salva com
sucesso.
![Page 63: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/63.jpg)
Vamos usar o banco de dados “contato”, o mesmo utilizado na
aula sobre banco de dados.
![Page 64: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/64.jpg)
Além disso, usaremos a mesma estrutura. As classes Contato e
ContatoDao.
![Page 65: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/65.jpg)
Contudo, faremos uma classe para abrir a conexão. A
ConnectionFactory
public class ConnectionFactory { public Connection getConnection() {
String url = "jdbc:postgresql://localhost/contatos?user=postgres&password=postgres";
try { return DriverManager.getConnection(url); } catch(SQLException excecao) { throw new RuntimeException(excecao); } }
![Page 66: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/66.jpg)
A ConnectionFactory será usada no construtor da ContatoDAO.
public ContatoDAO() {connection = new
ConnectionFactory().getConnection();}
![Page 67: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/67.jpg)
Depois de testado o aplicativo, substitua o textfield do telefone
por um formattedtextfield.
![Page 68: Java - Introdução a banco de dados](https://reader034.vdocuments.site/reader034/viewer/2022052316/559d27471a28abd6518b462f/html5/thumbnails/68.jpg)
Inclua os imports ao código fonte e o código para configurar a
máscara em personalizar codigo.
MaskFormatter mascara; try { mascara = new MaskFormatter(
"(##)#####-####"); mascara.setPlaceholderCharacter('_'); fmttxtFone.setFormatterFactory (
new DefaultFormatterFactory(mascara)); } catch (ParseException ex) {}
import javax.swing.text.DefaultFormatterFactory;import javax.swing.text.MaskFormatter;