68
Java - Introdução a banco de dados Prof: Sérgio Souza Costa

Java - Introdução a banco de dados

Embed Size (px)

DESCRIPTION

Aula topico 1 topico 2

Citation preview

Page 2: Java - Introdução a banco de dados

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

[email protected]

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

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

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

Persistência

Armazenar e recuperar informações eficientemente é em si um grande desafio.

Page 6: Java - Introdução a banco de dados

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

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

Tutorial

Page 9: Java - Introdução a banco de dados

Primeiro desafio. Fazer uma agenda de contatos.

Page 10: Java - Introdução a banco de dados

Onde você irá salvar os dados ?

Page 11: Java - Introdução a banco de dados

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

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

Como minha aplicação irá acessar o servidor ?

Page 14: Java - Introdução a banco de dados

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

Porém, como fazer isso no Java ?Preciso pesquisar.

Page 16: Java - Introdução a banco de dados

Pesquisando ...

Page 17: Java - Introdução a banco de dados

Alguns minutos depois ...

Page 18: Java - Introdução a banco de dados

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://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

Vá em propriedades do projeto, e depois aba “libraries”

Page 21: Java - Introdução a banco de dados

Depois, click em “Add External JARs”

Page 22: Java - Introdução a banco de dados

Biblioteca já adicionada.

Page 23: Java - Introdução a banco de dados

Agora preciso saber como executar um SQL através do Java

Page 24: Java - Introdução a banco de dados

Pesquisando ...

Page 25: Java - Introdução a banco de dados

Alguns minutos depois ...

Page 26: Java - Introdução a banco de dados

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

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

Pesquisando ...

Page 29: Java - Introdução a banco de dados

Alguns minutos depois ...

Page 30: Java - Introdução a banco de dados

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

O que acharam das minhas aplicações Java ?

Podem testar funciona ☺

Page 32: Java - Introdução a banco de dados

Funciona … porém não está utilizando os recursos da programação orientada a objetos

Page 33: Java - Introdução a banco de dados

Em Java, nós usamos orientação objeto, você precisa pesquisar mais sobre este paradigma.

Page 34: Java - Introdução a banco de dados

Como vocês resolveriam este problema ?

Page 35: Java - Introdução a banco de dados

OK. Vou pesquisar mais um pouco ....

Page 36: Java - Introdução a banco de dados

Pesquisando ...

Page 37: Java - Introdução a banco de dados

Alguns minutos depois ...

Page 38: Java - Introdução a banco de dados

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

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

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

Agora a solução ficou boa né ?

O que vocês acham ?

Page 42: Java - Introdução a banco de dados

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

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

Esses desenvolvedores, nunca estão satisfeitos. Vou pesquisar mais um pouco

Page 45: Java - Introdução a banco de dados

Pesquisando ...

Page 46: Java - Introdução a banco de dados

Alguns minutos depois ...

Page 47: Java - Introdução a banco de dados

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

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

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

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

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

Parabéns ! Ficou muito melhor.

Page 53: Java - Introdução a banco de dados

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

LaboratórioUm aplicativo de “Cadastro de Contatos” em Swing

Page 55: Java - Introdução a banco de dados

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

Codifiquem a ação “Sair”, similar ao que fizemos na aulas sobre interface gráfica

Page 57: Java - Introdução a banco de dados

Evitando fechamento acidental. Peça uma confirmação do usuário.

Page 58: Java - Introdução a banco de dados

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

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

Defina o “mnemonic” para cada botão. Facilita o uso direto pelo

teclado.

Page 61: Java - Introdução a banco de dados

Codifique a ação limpar, como fizemos em aula passada.

Page 62: Java - Introdução a banco de dados

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

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

Além disso, usaremos a mesma estrutura. As classes Contato e

ContatoDao.

Page 65: Java - Introdução a banco de dados

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

A ConnectionFactory será usada no construtor da ContatoDAO.

public ContatoDAO() {connection = new

ConnectionFactory().getConnection();}

Page 67: Java - Introdução a banco de dados

Depois de testado o aplicativo, substitua o textfield do telefone

por um formattedtextfield.

Page 68: Java - Introdução a banco de dados

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;