SlideShare una empresa de Scribd logo
1 de 134
public JavaIntermediario {

                 public void pacoteJavaStandard() {}

                 public void pacoteJavaIO() {}

                 public void pacoteJDBC() {}

                 public void pacoteSwing() {}

             }




                 Classes Java
Pacotes Standard / JDBC / Swing

                           Autor: Eduardo R. Carvalho
                           email: ercarval@gmail.com

                                           @version 1.3
Links
  • 4Shared
           – http://www.4shared.com/dir/10013955/61c5ad14/02Java_Intermediario.html


  • MySQL
           – www.mysql.org
  • PostGre
           – http://www.postgresql.org/


  • Apache Fundation - Frameworks
           – www.commons.apache.org


  • Swing

           – http://www.java2s.com/Product/Java/Swing/Look-And-Feel-LaF.htm
           – http://mindprod.com/jgloss/laf.html#MAC




27/03/12                                                                              2
Glossário de Termos


      Termo       Descrição
      JDBC        Java Data Base Conectivity
      API         Application Program Interface
      DAO         Data Access Object
      JCP         Java Community Process
      ODBC        Object DataBase Conectivity
      Refactory   Reconstruir parte do Programa
      ANSI        American National ?? Institute

      DML         Data Model Language
      DDL         Data Definition Language
      SQL         Structure Query Languare
      SGBD        Sistema Gerenciador de Banco de Dados




27/03/12                                                  3
Classes do Pacote java.lang
  •   java.lang.StringBuffer
  •   java.lang.Math
  •   java.lang.Integer
  •   java.lang.Double
  •   java.lang.Boolean
  •   java.lang.Long
  •   java.lang.Float
  •   java.lang.Character
  •   java.lang.Byte
  •   java.lang.Short
  •   java.lang.StringTokenizer


27/03/12                          4
Aula 1
  • Usando a Classe String
           – Em Java, cada caractere de uma String é um
             caractere Unicode de 16 bits. Já que caracteres
             Unicode tem 16 bits (e não os restritos 7 ou 8 bits
             que a ASCII oferece), um conjunto de caracteres
             sofisticado e internacional é facilmente
             representado em Unicode.

           – Em Java, strings são objetos:
            String s = new String(“abcdef”);
           – Ou:
            String s = “abcdef”;



27/03/12                                                           5
Classe String
  • Usando a Classe String

  String s2 = s; //s2 aponta para o mesmo
                //objeto referenciado
                   // por s

  • O objetivo para a certificação declara: “descrever o
  significado da inalterabilidade dos objetos String”,
  portanto, quando um valor for atribuído a uma String,
  esse nunca poderá ser alterado.
  Mas isso não significa que sua variável de referência
  também seja, muito pelo contrário.




27/03/12                                                   6
Classe String
  • Classe String e a Memória
           – Concatenando Objetos String
           – Criando novos objetos String




27/03/12                                    7
Classe String
 • Métodos importantes
           – concat
           – equalsIgnoreCase
           – length
           – replace
           – substring
           – toString
           – toLowerCase
           – toUperCase
           – trim


27/03/12                        8
Classe StringBuffer
  • Utilizada para manipulação de grande volumes de
    Strings, pois não cria novos objetos como a classe
    String. Então quando necessitar de concatenar
    grandes volumes de caracteres de preferência a
    Classe StringBuffer.
  • Métodos Importantes
           –   append
           –   insert
           –   reverse
           –   toString




27/03/12                                                 9
Classe Math
  • Métodos da Classe Math
           –   abs
           –   ceil
           –   Ffoor
           –   max
           –   min
           –   random
           –   round
           –   sin
           –   cons
           –   tan
           –   sqrt
           –   toDegrees
           –   toRadians

27/03/12                     10
Objetos Wappers
  • java.lang.Integer
  • java.lang.Double
  • java.lang.Boolean
  • java.lang.Long
  • java.lang.Float
  • java.lang.Character
  • java.lang.Byte
  • java.lang.Short


27/03/12                  11
Objetos Wrappers - Metodos
  • Método estático valueOf()
  • Métodos utilitários de conversão das Classes
    Wrappers
           – xxxValue()
           – parseXxx e valueOf
           – toString




27/03/12                                           12
Aula 2
  • Collenctions em Java
           –java.util
             •Collections
             •List
             •ArrayList
             •Set
             •HashSet
  • hashCode e equals


27/03/12                    13
Collections
  • Desvantagens dos arrays:
    – Arrays não podem ser redimensionados;
    – É impossível buscar diretamente um
      elemento para qual não se sabe o índice;
    – Não é possível saber quantas posições do
      array já foram populadas sem se criar
      métodos adicionais;

  • Collections Framework (pacote java.util):
    – É uma API robusta e possui diversas classes
      que representam estruturas de dados
      avançados em Java.




27/03/12                                         14
Collections – Principais Interfaces
  • As coleções têm como base a interface Collection,
    que define métodos para adicionar e remover um
    elemento, verificar se ele está na coleção entre
    outras operações (ver Javadoc).
  • Uma coleção pode implementar diretamente a
    interface Collection, porém normalmente se usa uma
    das duas subinterfaces mais famosas: justamente Set
    e List.
  • A interface Set, define um conjunto de elementos
    únicos enquanto a interface List permite a réplica de
    elementos.




27/03/12                                                15
Collections – Listas [java.util.List]
  • Um primeiro recurso que a API de Collections traz são
    listas. Uma lista é uma coleção que permite
    elementos duplicados e mantendo uma ordenação
    específica entre os elementos.
  • Em outras palavras, temos a garantia de que, quando
    percorrer a lista, os elementos serão encontrados em
    uma ordem prédeterminada, definida na hora da
    inserção dos mesmos.
  • Ela resolve todos os problemas que levantamos em
    relação a array (busca, remoção, tamanho “infinito”,
    etc). Esse código já está pronto!
  • A API de Collections traz a interface java.util.List que
    especifica o que uma classe deve ser capaz de fazer
    para ser uma lista.




27/03/12                                                   16
Collections – Listas [java.util.List]
  • Há diversas implementações disponíveis, cada uma
    com uma forma diferente de representar uma lista.
  • A implementação mais utilizada da interface List é a
    ArrayList que trabalha com uma array interna para
    gerar uma lista portanto ela é mais rápida na
    pesquisa que sua concorrente, a LinkedList, que é
    mais rápida na inserção e remoção de itens nas
    pontas.
  • Para criar um ArrayList basta chamar o construtor:
     ArrayList lista = new ArrayList();

  • É sempre possível abstrair a lista a partir da interface
    List:
     List lista = new ArrayList();




27/03/12                                                       17
Collections – Listas [java.util.List]
  • Para criar uma lista de nomes (String),
    podemos fazer:
  List lista = new ArrayList();
  lista.add("Guilherme");
  lista.add("Paulo");
  lista.add("Sergio");

  • A interface List possui dois métodos add, um
    que recebe o objeto a ser inserido e o coloca
    no final da lista e um segundo que permite
    adicionar o elemento em qualquer posição da
    mesma.



27/03/12                                            18
Collections – Listas [java.util.List]
 • Notem que em momento algum
   dizemos qual é o tamanho da lista;
   podemos acrescentar quantos
   elementos quisermos que a lista cresce
   conforme for necessário.
 • Toda lista (na verdade, toda Collection)
   trabalha do modo mais genérico
   possível. Isto é, não há uma ArrayList
   específica para Strings, outra para
   Números, outra para Datas etc. Todos
   os métodos trabalham com Object.


27/03/12                                      19
Collections – Listas [java.util.List]
 • Assim, é possível criar, por exemplo,
   uma lista de Contas:
  Conta c1 = new Conta();
  c1.depositar(100);
  Conta c2 = new Conta();
  c2.depositar(200);
  Conta c3 = new Conta();
  c3.depositar(300);
  List contas = new ArrayList();
  contas.add(c1);
  contas.add(c3);
  contas.add(c2);


27/03/12                                   20
Collections – Listas [java.util.List]
 • Para saber quantos elementos há na
   lista, podemos usar o método size():
           System.out.println(contas.size());


  • Há ainda um método get(int) que
    recebe como argumento o índice do
    elemento que se quer recuperar.
    Através dele podemos fazer um for para
    iterar na lista de contas:
           for(int i = 0; i < contas.size(); i++) {
              contas.get(i);
           }

27/03/12                                              21
Collections – Listas [java.util.List]
  • Mas como fazer para imprimir o saldo dessas
    contas? Podemos acessar o getSaldo()
    diretamente após fazer contas.get(i)? Não
    podemos! Lembrem-se que toda lista trabalha
    sempre com Object! Assim a referência
    retornada pelo get(i) é do tipo Object, sendo
    necessário fazer um casting para Conta se
    quisermos acessar o getSaldo():
           for(int i = 0; i < contas.size(); i++) {
              ContaCorrente cc = (ContaCorrente) contas.get(i);
              System.out.println(cc.getSaldo());
           } // Notem que a ordem dos elementos não é alterada




27/03/12                                                          22
Collections – Listas [java.util.List]
 • Há ainda outros métodos como
   remove() que recebe um objeto que se
   deseja remover da lista; e o contains()
   que recebe um objeto como argumento
   e devolve true or false indicando se o
   elemento está ou não na lista.

  • A interface List e algumas classes que a
    implementam podem ser vistas no
    diagrama a seguir



27/03/12                                       23
Collections – Listas [java.util.List]




27/03/12                                 24
Collections – Listas [java.util.List]
  • Algumas listas, como a ArrayList, tem
    acesso aleatório aos seus elementos: a busca
    por um elemento em uma determinada
    posição é feita de maneira imediata, sem que
    a lista inteira seja percorrida.
  • Neste caso o acesso é feito através do método
    get(int) e é muito rápido. Caso contrário,
    percorrer uma lista usando um for como esse
    que acabos de ver, pode ser desastroso. Ao
    percorrermos uma listas, devemos usar
    sempre um Iterator ou o enhanced for,
    como veremos.



27/03/12                                        25
Collections – Listas [java.util.List]
 • Uma lista é uma excelente alternativa a
   um array comum já que temos todos os
   benefícios de arrays, sem a necessidade
   de tomar cuidado com remoções, falta
   de espaço etc.
 • A outra implementação muito usada
   (LinkedList), fornece métodos adicionais
   para obter e remover o primeiro e
   último elemento da lista.




27/03/12                                      26
Ordenação: Collections.sort
  • Vimos anteriormente que as listas são percorridas de
    maneira pré-determinada de acordo com a inclusão
    dos itens. Mas muitas vezes queremos percorrer a
    nossa lista de maneira ordenada. A classe
    Collections traz um método estático sort que recebe
    um List como argumento e o ordena por ordem
    crescente. Por exemplo:

  List lista = new ArrayList();
  lista.add("Sérgio");
  lista.add("Paulo");
  lista.add("Guilherme");
  System.out.println(lista);
  Collections.sort(lista);
  System.out.println(lista);




27/03/12                                               27
Ordenação: Collections.sort
  • Ao testarmos o exemplo acima, observamos que
    primeiro a lista é impressa na ordem de inserção e,
    depois de chamar o sort, ela é impressa em ordem
    alfabética. Mas toda lista em Java pode ser de
    qualquer tipo de objeto, por exemplo, Conta. E se
    quisermos ordenar uma lista de Conta? Em que
    ordem a classe Collections ordenará? Pelo saldo? Pelo
    nome do correntista?

           Conta c1 = new Conta();
           c1.deposita(500);
           Conta c2 = new Conta();
           c2.deposita(200);
           Conta c3 = new Conta();
           c3.deposita(150);




27/03/12                                                    28
Ordenação: Collections.sort



  List<Conta> contas = new ArrayList<Conta>();
  contas.add(c1);
  contas.add(c3);
  contas.add(c2);
  Collections.sort(contas); // qual o critério de
    ordenação?




27/03/12                                            29
Ordenação: Collections.sort
  • Sempre que falamos em ordenação, precisamos
    pensar em um critério de ordenação, uma forma de
    determinar qual elemento vem antes de qual. É
    necessário instruir o Java sobre como comparar
    nossas ContaCorrente a fim de determinar uma
    ordem na lista.
  • Vamos fazer com que os elementos da nossa coleção
    implementem a interface java.lang.Comparable,
    que define o método int compareTo(Object). Este
    método deve retornar zero se o objeto comparado for
    igual a este objeto, um número negativo se este
    objeto for menor que o objeto dado, e um número
    positivo se este objeto for maior que o objeto dado.




27/03/12                                                   30
Ordenação: Collections.sort
 • Para ordenar as ContaCorrente por
   saldo, basta implementar o
   Comparable:
  public class Conta implements Comparable {
    ...
    public int compareTo(Conta outra) {
      if(this.saldo < outra.saldo) {
        return -1;
      } else if(this.saldo > outra.saldo) {
        return 1;
      }
      return 0;
    }
  }


27/03/12                                       31
Ordenação: Collections.sort
  • Com o código anterior, nossa classe tornou-se
    “comparável”: dados dois objetos da classe,
    conseguimos dizer se um objeto é maior, menor ou
    igual ao outro, segundo algum critério por nós
    definido. No nosso caso, a comparação será feita
    baseando-se no saldo da conta.
  • Repare que o critério de ordenação é totalmente
    aberto, definido pelo programador. Se quisermos
    ordenar por outro atributo (ou até por uma
    combinação de atributos), basta modificar a
    implementação do método compareTo na classe.
  • Agora sim, quando chamarmos o método sort de
    Collections ele saberá como fazer a ordenação da
    lista; ele usará o critério que definimos no método
    compareTo.



27/03/12                                                  32
Ordenação: Collections.sort
 • Mas e o exemplo anterior, com uma
   lista de Strings? Porque a ordenação
   funcionou naquele caso sem
   precisarmos fazer nada? Simples: quem
   escreveu a classe String (lembrem-se
   que ela é uma classe normal do Java)
   implementou a interface Comparable e
   o método compareTo para Strings,
   fazendo comparação em ordem
   alfabética.



27/03/12                                   33
Collections : Conjuntos – java.util.Set
 • Um conjunto (Set) funciona de forma
   análoga aos conjuntos da matemática,
   ele é uma coleção que não permite
   elementos duplicados:




27/03/12                                   34
Collections – Conjuntos – java.util.Set




27/03/12                               35
Collections – Conjuntos – java.util.Set
 • Outra característica fundamental é o
   fato de que a ordem em que os
   elementos são armazenados pode não
   ser a ordem na qual eles foram
   inseridos no conjunto.
 • Tal ordem varia de implementação para
   implementação.
 • Um conjunto é representado pela
   interface Set e tem como suas
   principais implementações as classes
   HashSet e TreeSet.


27/03/12                               36
Collections – Conjuntos – java.util.Set
  • O código a seguir cria um conjunto e adiciona três
    itens, apesar de tentar adicionar quatro:

  Set conjunto = new HashSet();
  conjunto.add("item 1");
  conjunto.add("item 2");
  conjunto.add("item 3");
  conjunto.add("item 3");
  // imprime a sequência na tela
  System.out.println(conjunto);

  • O resultado são os elementos do conjunto, a ordem
    na qual eles aparecem podem ou não ser a ordem na
    qual eles foram inseridos e é incorreto supor que será
    sempre a mesma ordem!



27/03/12                                                 37
Collections – Percorrendo Coleções
  • Como percorrer os elementos de uma
    coleção? Se for uma lista, podemos sempre
    utilizar um laço for, chamando o método get
    para cada elemento. Mas e se a coleção não
    permitir indexação?
  • Por exemplo, um Set não possui uma função
    para pegar o primeiro, o segundo ou o quinto
    elemento do conjunto...
  • Toda coleção fornece acesso a um iterator,
    um objeto que implementa a interface
    Iterator, que conhece internamente a
    coleção e dá acesso a todos os seus
    elementos, como a figura a seguir:


27/03/12                                           38
Collections – Percorrendo Coleções




27/03/12                              39
Collections: Ordenando um Set
 • Seria possível usar uma outra
   implementação de conjuntos, como um
   TreeSet, que insere os elementos, de tal
   forma, que quando forem percorridos,
   aparecem em uma ordem definida pelo
   método de comparação entre seus
   elementos. Esse método é definido pela
   interface Comparable.




27/03/12                                  40
Collections – Percorrendo Coleções
  • Primeiro criamos um Iterator que entra na
    coleção.
  • A cada chamada do método next(), o
    Iterator retorna o próximo objeto do
    conjunto.
  • Um iterator pode ser obtido com o método
    iterator() de Collection, por exemplo:
           Iterator i = lista.iterator();

  • A interface Iterator possui dois métodos
    principais: hasNext() indica se ainda existe
    um elemento a ser percorrido e next()
    retorna o próximo objeto.


27/03/12                                           41
Collections – Percorrendo Coleções
 • Voltando ao exemplo do conjunto de
   strings, vamos percorrer o conjunto:
  // popula o conjunto
  Set conjunto = new HashSet();
  conjunto.add(“item 1”);
  conjunto.add(“item 2”);
  conjunto.add(“item 3”);

  // retorna o iterator
  Iterator i = conjunto.iterator();

  // continua


27/03/12                                  42
Collections – Percorrendo Coleções
  while (i.hasNext()) {

           // recebe a palavra
           Object elemento = i.next();
           String palavra = (String) elemento;

           // mostra a palavra
           System.out.println(palavra);

  }
  .


27/03/12                                         43
Collections – Percorrendo Coleções
  • O while anterior só termina quando todos os elementos do
    conjunto forem percorridos, isto é, quando o método
    hasNext mencionar que não existem mais itens.
  • Em que ordem serão acessados os elementos?
  • Numa lista, os elementos irão aparecer de acordo com o
    índice em que foram inseridos, isto é, de acordo com o
    que foi prédeterminado.
  • Em um conjunto, a ordem depende da implementação da
    interface Set.
  • Por que o Set é então tão importante e usado?
  • Para perceber se um item já existe em uma lista é muito
    mais rápido usar um Set do que um List, e os TreeSets já
    vem ordenados de acordo com as características que
    desejarmos!




27/03/12                                                       44
Collections – Principais Interfaces
 • A busca em um Set pode ser mais
   rápida que em um objeto do tipo List,
   pois diversas implementações utilizam
   tabelas de espalhamento (hashtables),
   trazendo a busca para tempo linear.

  • A interface Map faz parte do framework
    mas não estende Collection. (veremos
    Map mais adiante).




27/03/12                                     45
Collections – Principais Interfaces




27/03/12                               46
Collections : Mapas – java.util.Map
 • Um mapa é composto de uma associação
   de um objeto chave a um objeto valor. É
   equivalente ao conceito de dicionário
   usado em várias linguagens. Algumas
   linguagens, como Perl ou PHP, possuem
   suporte nativo a mapas, onde são
   conhecidos como matrizes associativas.
 • Ele é um mapa pois é possível usá-lo
   para mapear uma chave, por exemplo:
   mapeie o valor “Season” à chave
   “escola”, ou mapeie “Avenida Nelson
   D'Avila” à chave “rua”.


27/03/12                                     47
Collections : Mapas – java.util.Map




27/03/12                               48
Collections : Mapas – java.util.Map
  • O método put(Object, Object) da
    interface Map recebe a chave e o
    valor de uma nova associação. Para
    saber o que está associado a um
    determinado objeto-chave, passa-se
    esse objeto no método
    get(Object).
  • Observem o exemplo: criamos duas
    contas e as colocamos em um mapa
    associando-as ao seu dono
    respectivamente.

27/03/12                                 49
Collections – Mapas – java.util.Map
  Conta c1 = new Conta();
  c1.depositar(10000);
  Conta c2 = new Conta();
  c2.depositar(3000);

  // cria o mapa
  Map mapaDeContas = new HashMap();

  // adiciona duas chaves e seus valores
  mapaDeContas.put("diretor", c1);
  mapaDeContas.put("gerente", c2);

  // qual a conta do diretor?
  Object elemento = mapaDeContas.get("diretor");
  Conta contaDoDiretor = (Conta) elemento;




27/03/12                                           50
Collections : Mapas – java.util.Map
  • Um mapa, assim como as coleções, trabalha diretamente com
    Objects (tanto na chave quanto no valor), o que torna
    necessário o casting no momento que recuperar elementos.
  • Suas principais implementações são o HashMap e o
    Hashtable.
  • Apesar do mapa fazer parte do framework, ele não implementa
    a interface Collection, por ter um comportamento bem
    diferente. Porém, as coleções internas de um mapa (a de chaves
    e a de valores) são acessíveis por métodos definidos na
    interface Map.
  • O método keySet() retorna um Set com as chaves daquele
    mapa, e o método values() retorna a Collection com todos os
    valores que foram associados a alguma das chaves.
  • Um mapa importante é a tradicional classe Properties, que
    mapeia strings e é muito utilizada para a configuração de
    aplicações.




27/03/12                                                         51
Collections : Mapas – java.util.Map




27/03/12                               52
Object

         Cliente




Cliente cliente = new Cliente()
Collections – Equals e HashCode
  • Muitas das coleções do Java guardam os
    objetos dentro de tabelas de hash. Essas
    tabelas são utilizadas para que a pesquisa de
    um objeto seja feira de maneira rápida.
  • Como funciona? Cada objeto é “classificado”
    pelo seu hashCode, e com isso conseguimos
    espalhar cada objeto agrupando-os pelo
    hashCode. Quando formos buscar um
    determinado objeto, só vamos procurar entre
    os elementos que estão no grupo daquele
    hashCode. Dentro desse grupo vamos
    testando o objeto procurado com o candidato
    usando equals().


27/03/12                                            54
Collections – Equals e HashCode
  • Para que isso funcione direito, o método
    hashCode de cada objeto deve retornar o
    mesmo valor para dois objetos se eles são
    considerados equals. Em outras palavras:

   a.equals(b) implica a.hashCode() == b.hashCode()

  • Implementar hashCode de tal maneira que ele
    retorne valores diferentes para dois objetos
    considerados equals quebra o contrato de
    Object, e resultará em collections que usam
    espalhamento (como HashSet, HashMap e
    Hashtable) não achando objetos iguais dentro
    de uma mesma coleção.

27/03/12                                          55
Exercícios
  1) Criar duas classe filhas de Conta: ContaCorrente e
    ContaPoupanca. Agora, criar na classe Banco, uma lista
    de Contas. Repare que nessa lista de Contas podemos
    colocar tanto ContaCorrente quanto ContaPoupanca. Criar
    um metodo void addConta(Conta c), um método Conta
    getConta(int x) e outro int totalDeContas().
  2) Criar um método na classe Banco que busca por uma
    determinada Conta e informar se ela se encontra lá.
  3) Criar um código que insira 100 mil números numa
    ArrayList e pesquise-os. Vamos usar um método da classe
    System para cronometrar o tempo gasto.
  4) Troque a ArrayList por um HashSet e verifiquem o tempo
    que vai demorar.




27/03/12                                                      56
Aula 3
  • Mais de java.util
     Trabalhando com Datas
     Manipulação de Arquivos
     Serialização de Objetos




27/03/12                       57
Trabalhando com Datas
  • Trabalhar com Datas é uma das coisas mais
    trabalhosas em qualquer linguagem de
    programação. Aquelas que usam bancos de dados
    exigem do desenvolvedor um esforço maior ainda.
    Formatar a saída destes dados também pode ser um
    problema quando a formatação depende do local do
    usuário – ou seja, na internet estamos falando do
    mundo inteiro.

  • A linguagem Java oferece um rico conjunto de
    classes para manipular datas. As principais classes
    para manipulação de datas pertence os pacote
  • java.util:
     – java.util.Date
     – java.util.Calendar
     – java.util.GregorianCalendar



27/03/12                                                  58
Trabalhando com Datas
  • A classe Date representa, por default, a data corrente do
    sistema em milisegundos.

  • Anteriormente a versão 1.1 do Java, a classe Date
    suportava a criação de datas a partir de parâmetros como
    dia, mês, ano, horas, minutos, etc, e também a
    formatação e o parsing de strings para Datas. Porém,
    essas funções foram depreciadas por não suportarem
    internacionalização.

  • A partir da versão 1.1, as classes Calendar e DateFormat
    foram inseridas na API e devem ser usadas para
    conversão entre campos de datas e horas para Date e
    formatação e parsing, respectivamente.

  • Para instanciar um objeto Date:

      Date hoje = new Date();
      System.out.println("A data de hoje é: " + hoje);


27/03/12                                                        59
Trabalhando com Datas
  • A classe abstrata Calendar também encapsula
    um momento no tempo representado em
    milissegundos.

  • Também provê métodos para manipulação
    desse momento.

  • A subclasse concreta de Calendar mais usada é
    a GregorianCalendar que representa o
    calendário usado pela maior parte dos países
    (outras implementações existem, como a do
    calendário budista BuddhistCalendar, mas que
    são internas e devolvidas de acordo com suas
    respectivas localizações).

27/03/12                                            60
Trabalhando com Datas
  • Para obter um Calendar que encapsula o instante
    atual (data e hora), usamos o método estático
    getInstance() (familiar?) de Calendar:

  Calendar c = Calendar.getInstance();
  System.out.println(“Dia do Mês:“ + c.get(Calendar.DAY_OF_MONTH));
  System.out.println(“Dia da Semana:“ + c.get(Calendar.DAY_OF_WEEK));


  • No exemplo acima, imprimimos o dia de hoje e o
    dia da semana correspondente. Note que o dia da
    semana devolvido é um inteiro que representa o
    d
    dia da semana (Calendar.MONDAY, etc.)




27/03/12                                                                61
Trabalhando com Datas
  • A partir de um Calendar, podemos saber o valor de seus
    campos, como ano, mês, dia, hora e minuto. Para isso,
    usamos o método get que recebe um inteiro
    representando o campo; os valores possíveis estão em
    constantes na própria classe Calendar.

  • Da mesma forma que podemos obter os valores dos
    campos, podemos atribuir novos valores a esses campos
    por meio dos métodos set. Há diversos métodos set em
    Calendar. O mais geral é o que recebe dois argumentos: o
    primeiro indica qual é o campo (usando as constantes de
    Calendar) e o segundo, o novo valor. Além desse método
    set, outros métodos set recebem valores de determinados
    campos; o set de três argumentos, por exemplo, recebe
    ano, mês e dia.




27/03/12                                                       62
Trabalhando com Datas
  • Vejamos um exemplo de como alterar a data de hoje:

  Calendar c = Calendar.getInstance();
  c.set(Calendar.HOUR, 10);
  c.set(Calendar.MINUTE, 30);
  c.set(2005, 12, 25);

  • Outro método bastante usado é add que adiciona uma
    certa quantidade a qualquer campo do Calendar. Por
    exemplo, para adicionar um ano à data de hoje:

  Calendar c = Calendar.getInstance();
  c.add(Calendar.YEAR, 1); // adiciona 1 ao ano

  • Note que, embora o método se chame add, também
    podemos usá-lo para subtrair valores, bastando colocar
    uma quantidade negativa no segundo argumento.



27/03/12                                                     63
Trabalhando com Datas
  • Os métodos after e before são usados para
    comparar o objeto Calendar em questão a outro
    Calendar. O método after devolverá true quando
    o Calendar em questão estiver num momento no
    tempo maior que o do Calendar passado como
    argumento. Por exemplo, after devolverá false se
    compararmos o Dia das Crianças com o Natal,
    pois o Dia das Crianças não vem depois do Natal:

  Calendar c1 = new GregorianCalendar(2005, Calendar.OCTOBER, 12);
  Calendar c2 = new GregorianCalendar(2005, Calendar.DECEMBER, 25);
  System.out.println(c1.after(c2)); // imprime false




27/03/12                                                              64
Trabalhando com Datas
  • Analogamente, o método before verifica se o
    momento em questão vem antes do momento
    do Calendar passado como argumento. No
    exemplo anterior, c1.before(c2) devolverá
    true, pois o Dia das Crianças vem antes do
    Natal.

  • Notem que Calendar implementa a interface
    Comparable. Isso quer dizer que podemos
    usar o método compareTo para comparar
    dois calendários. No fundo, after e before
    usam o compareTo para dar suas respostas.


27/03/12                                         65
Trabalhando com Datas
  • Por default, em Java, datas consideradas
    inválidas, como “35/08/1981” por exemplo, são
    “roladas”, ou seja, transformadas em datas
    válidas, adicionando os dias excedentes. A data
    35/08/1981 será rolada para a seguinte data
    válida: 04/09/1981. Porém, caso uma data
    inválida seja informada, há uma maneira de
    evitar que essa transformação ocorra e uma
    exceção lançada.

  • Para desabilitar esse comportamento é
    necessário utilizar o método
    setLenient(boolean), que evita a rolagem de
    data e lança uma exceção.


27/03/12                                              66
Trabalhando com Datas
  • Exercício:

           – Criar um método que verifique o
             intervalo entre duas datas e retorne o
             número de dias, dado dois objetos
             Calendar como argumentos.




27/03/12                                              67
Trabalhando com Datas
 • O cálculo é feito pegando a diferença
   entre as datas em milissegundos e
   dividindo esse valor pelo número de
   milissegundos em um dia:

  public int diferencaEmDias(Calendar c1, Calendar c2) {
    long m1 = c1.getTimeInMillis();
    long m2 = c2.getTimeInMillis();
    Double d = new Double(((m2 - m1) / (24*60*60*1000)));
    return d.intValue();
  }




27/03/12                                                    68
Manipulando Arquivos
  • Assim como todo o resto das bibliotecas em Java,
    a parte de controle de entrada e saída de dados
    (conhecido como I/O) é orientada a objetos e
    usa os principais conceitos mostrados até agora:
    interface, classes abstratas e polimorfismo.
  • A idéia atrás do polimorfismo no pacote java.io é
    de utilizar fluxos de entrada (InputStream) e de
    saída (OutputStream) para toda e qualquer
    operação, seja ela relativa a um arquivo, a uma
    conexão remota via sockets ou até mesmo a
    entrada e saída padrão de um programa
    (normalmente o teclado e o console).



27/03/12                                            69
Manipulando Arquivos
  • As classes abstratas InputStream e
    OutputStream definem respectivamente o
    comportamento padrão dos fluxos em Java:
    em um fluxo de entrada é possível ler bytes e
    no fluxo de saída escrever bytes.
  • A grande vantagem dessa abstração pode ser
    mostrada em um método qualquer que utiliza
    um OutputStream recebido como argumento
    para escrever em um fluxo de saída. Para
    onde o método está escrevendo? Não se sabe
    e não importa: quando o sistema precisar
    escrever em um arquivo ou em uma socket
    basta chamar o mesmo método!

27/03/12                                            70
InputStream: Lendo bytes
  • Vamos ler um byte de um arquivo:
  class TestaEntrada {
    public static void main(String[] args) throws IOException {
      InputStream is = new FileInputStream("arquivo.txt");
      int b = is.read();
    }
  }


  • A classe InputStream é abstrata, e
    FileInputStream uma de suas filhas. Ela recebe
    uma String que é o nome do arquivo como
    argumento pelo construtor. Ela vai procurar o arquivo
    no diretório em que o java foi invocado (no caso do
    Eclipse vai ser dentro do diretório do projeto).
    Podemos usar um caminho absoluto.



27/03/12                                                          71
InputStream: Lendo bytes
  • Quando trabalhamos com java.io, diversos
    métodos lançam IOException, que é uma
    exception do tipo checked, o que nos obriga a
    tratá-la ou lançá-la.
  • Estamos aqui declarando IOException através
    do throws do main apenas para facilitar o
    exemplo, caso a exception ocorra a JVM vai
    parar mostrando a stacktrace.
  • InputStream tem diversas filhas, como
    ObjectInputStream, AudioInputStream,
    ByteArrayInputStream, entre outras.

27/03/12                                            72
InputStreamReader: lendo chars
  • Para recuperar um caractere precisamos traduzir os
    bytes com o encoding dado para o respectivo código
    unicode. Escrever esse decoder é muito complicado.
    Mas o Java já nos oferece uma classe que faz isso,
    que é a classe InputStreamReader:
  class TestaEntrada {
    public static void main(String[] args) throws IOException {
      InputStream is = new FileInputStream("arquivo.txt");
      InputStreamReader isr = new InputStreamReader(is);
      int c = isr.read();
    }
  }


  • O construtor de InputStreamReader pode receber o
    character encoding a ser utilizado como parâmetro,
    se desejado, tais como UTF-8 ou ISO-88591.

27/03/12                                                          73
InputStreamReader: lendo chars
  • InputStreamReader é filha da classe
    abstrata Reader. Existem diversas
    filhas, próprias para manipulação de
    chars. A mais apropriada para leitura de
    arquivos é a classe FileReader.




27/03/12                                       74
BufferedReader: lendo Strings
  • Apesar da classe abstrata Reader já ajudar no
    trabalho com caracteres ainda fica difícil para pegar
    uma String. É necesário fazer o casting de cada
    caractere para char e isso pode ser muito custoso. A
    classe BufferedReader é um Reader que recebe
    Reader no construtor e concatena os diversos chars
    para formar uma String através do método
    readLine:
  class TestaEntrada {
    public static void main(String[] args) throws IOException {
      FileReader reader = new FileReader("arquivo.txt");
      BufferedReader bReader = new BufferedReader(reader);
      String s = bReader.readLine();
    }
  }




27/03/12                                                          75
BufferedReader: lendo Strings
  • Como o próprio nome diz, essa classe lê do Reader
    por pedaços (também conhecidos como chunk) para
    evitar realizar muitas chamadas ao file system.
    Também podemos configurar o tamanho do buffer
    pelo construtor.

  • O gráfico abaixo mostra a composição de classes na
    operação de leitura:




27/03/12                                                 76
BufferedReader: lendo Strings
  • O método readLine devolve a linha que foi lida e
    muda o cursor para a próxima linha. Caso ele chegue
    ao fim do Reader (no nosso caso fim do arquivo), ele
    vai devolver null. Então com um simples laço
    podemos ler o arquivo por Inteiro:
  class TestaEntrada {
    public static void main(String[] args) throws IOException {
      FileReader reader = new Filereader(“arquivo.txt”);
      BufferedReader bReader = new BufferedReader(reader);

           String s = bReader.readLine(); // primeira linha
           while(s != null) {
             System.out.println(s);
             s = bReader.readLine();
           }
      }
  }


27/03/12                                                          77
Lendo Strings do teclado
  • Exercício:
           – Dado o gráfico abaixo, criar um mecanismo para leitura
             de Strings digitado pelo teclado:




27/03/12                                                          78
Lendo Strings do teclado
  • Com um passe de mágica, passamos a ler do teclado
    em vez de um arquivo, utilizando o System.in que é
    uma referência a um InputStream que lê da entrada
    padrão.
  class TestaEntrada {
    public static void main(String[] args) throws IOException {
      InputStream is = System.in;
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);

           String s = br.readLine();
           while(s != null) {
             System.out.println(s);
             s = br.readLine();
           }
      }
  }


27/03/12                                                          79
A analogia na saída
  • Como podemos imaginar, o processo de
    escrita (output) é o processo inverso ao de
    leitura (input):




27/03/12                                          80
A analogia na saída
  • Exercício:
     – Dado o gráfico anterior e o que vimos
       até agora sobre leitura, fazer um
       programa para escrita de um arquivo a
       partir de String lidos do teclado.




27/03/12                                       81
Fechando arquivos
  • É importantíssimo SEMPRE fechar o arquivo, ou a classe a qual
    estamos utilizando para facilitar a leitura/escrita. Ao realizar a
    operação de close, a classe facilitadora sempre fechará o stream
    do qual ela está lendo.

  • O método close deve ser invocado de qualquer maneira, por isso
    é comum que este esteja dentro de um bloco finally.

  • Se um arquivo for esquecido aberto, e a referência para ele for
    perdida, ele será fechado pelo garbage collector, que veremos
    mais a frente, por causa do finalize. Mas não é bom nos
    prendermos a isso. Se esquecermos de fechar o arquivo no caso
    de um programa pequeno como os que fizemos até agora, o
    programa vai terminar antes que o garbage collector atue,
    resultando em um arquivo não escrito (os bytes ficarão no
    buffer do BufferedWriter).

  • Problemas similares podem acontecer com leitores deixados em
    aberto.


27/03/12                                                              82
Uma maneira mais fácil de ler arquivos
  • No java 1.5 temos a classe java.util.Scanner que facilita bastante o
    trabalho de ler de um InputStream. Além disso, a classe PrintStream
    possui agora um construtor que já recebe o nome de um arquivo como
    argumento. Dessa forma a leitura do teclado com saída para um
    arquivo ficou muito simples:

  Scanner s = new Scanner(System.in);
  PrintStream ps = new PrintStream("arquivo.txt");
  while(s.hasNextLine()) {
    ps.println(s.nextLine());
  }

  •   Ambos os métodos não lançam IOException (PrintStream lança
      FileNotFoundException se construirmos passando uma String, que é filha de
      IOException e indica que o arquivo não foi encontrado), sendo que o Scanner
      considerará que chegou ao fim se uma IOException for lançada, e o PrintStream
      simplesmente engole exceptions desse tipo. Ambos possuem métodos para
      verificar se algum problema ocorreu. A classe Scanner é do pacote java.util. Ela
      possui métodos muito úteis para trabalhar com Strings, em especial diversos
      métodos já preparados para pegar números e palavras já formatadas através de
      expressões regulares.



27/03/12                                                                                 83
Serialização de Objetos
  • No contexto de armazenamento e transmissão de
    dados, a serialização é o processo de salvar um
    objeto em um meio de armazenamento (como um
    arquivo de computador ou um buffer de memória) ou
    transmiti-lo por uma conexão de rede, seja em forma
    binária ou em formato de texto. Esta série de bytes
    pode ser usada para recriar um objeto com o mesmo
    estado interno que o original.

  • A serialização fornece algumas vantagens, tais como:
     – Um método simples e robusto de tornar
       objetos persistentes
     – Um método para a implementação de
       chamadas de procedimento remoto
     – Um método a distribuição de objetos


27/03/12                                                   84
Serialização de Objetos
  • Para que tais funcionalidades sejam
    usufruídas, deve ser mantida a
    independência de arquitetura. Por
    exemplo, um computador com uma
    arquitetura de hardware diferente
    deve ser capaz de reconstruir de
    forma consistente o fluxo de dados
    seriais.

  • Em Java, para tornar um objeto
    Serializável, basta que a classe
    implemente a interface
    java.io.Serializable.

27/03/12                                  85
Serialização de Objetos
  • Tendo um objeto serializável em
    mãos, podemos tanto persistí-lo em
    disco, em um banco de dados, ou
    ainda enviá-lo através de uma rede.

  • A linguagem Java oferece duas classes
    que permitem, a partir de um input
    stream ou um output stream,
    respectivamente serializar ou
    desserializar um objeto.


27/03/12                                  86
Serialização de Objetos
  • A classe ObjectOutputStream permite
    gravar através de um output stream
    um objeto serializável:
  Conta c = new Conta(); // Nossa conta corrente é serializável

  FileOutputStream output = new FileOutputStream(“arquivo.txt”);
  ObjectOutputStream objOutput = new ObjectOutputStream(output);

  objOutput.writeObject(c); // Gravando a conta no arquivo

  objOutput.flush();
  objOutput.close();




27/03/12                                                           87
Serialização de Objetos
 • E a classe ObjectInputStream permite ler
   através de um input stream um objeto
   serializável:

  FileInputStream input = new FileInputStream(“arquivo.txt”);
  ObjectInputStream objInput = new ObjectInputStream(input);

  Object objeto = objInput.ReadObject();
  Conta c = (Conta)c;

  objInput.close();




27/03/12                                                        88
Serialização de Objetos
  • Exercícios:
     – Dado o exercício de armazenamento de contas
       da aula passada, criar um mecanismo para
       persistir as aulas em um arquivo texto e,
       sempre ao se inicializar a aplicação, recuperar
       as contas já criadas.

           – Personalizar o aplicativo para ler as contas a
            partir de um arquivo configurado em um
            arquivo .properties (para manipulação de
            arquivos de propriedades, ver a classe
            Properties)

27/03/12                                                      89
Aula 4
  • JDBC
           –   Arquitetura
           –   Drivers
           –   DriveManager
           –   Fazendo uma consulta no banco
                • java.sql.Connection
                • java.sql.Statement
                • java.sql.ResultSet
  • java.sql.PreparedStatement
           – Design Pattern DAO ( Data Access Object ) e VO
             ( Value Object )
           – Características
           – Arquitetura

27/03/12                                                      90
Banco de Dados
  • Banco de dados Relacionais.
     – Uma reprodução de uma parte de uma mundo real.
     – Armazenamento dos dados ficam em Tabelas que são formadas por
       linhas e colunas. E cada coluna representa um campo e cada linha
       um registro.
     – Comprando com Classes Java as Tabelas são as Classes Java, cada
       Campo da Tabela é um Atributo de uma Classe e cada Registro da
       Tabela é um Objeto( representa propriamente o Dado).
     – Utiliza uma linguagem padrão para sua manipulação. Padrão SQL
       ANSI. Mas cada banco aplica suas variações em cima deste padrão.
     – Esta linguagem utiliza uma serie de comandos para definição de
       dados “estruturais” (DDL), tais como criação de Tabelas,Bancos de
       Dados etc. Ela utiliza outro tipos de comandos (DML) para
       manipular ( selecionar, inserir, excluir, etc. ) os registros de forma
       simultânea.
     – Relacionamento entre entidades.
         • Tem como objetivo eliminar redundâncias na armazenagem dos
           dados, evitando assim informações conflitantes.




27/03/12                                                                        91
Linguagem SQL
  • Comandos de DDL
           –   Create Database: Criar um novo banco de dados.
           –   Create TABLE: Criar uma nova tabela no banco de dados.
           –   Alter Table: Alterar uma tabela no banco de dados.
           –   Drop Table: Remover uma tabela no banco de dados.
           –   Drop Database: Remover um banco de dados.

  • Comandos de DML:
           – SELECT : Selecionar / Manipular os dados armazenados no
             banco de dados. O produto desta seleção é chamado de
             “Recordset”.
           – Insert :Comando dado para inserir dados da tabela
           – Update: Comando dado para atualizar dados já inseridos na
             tabela.
           – Delete: Comando dado para excluir dados contidos na tabela.


27/03/12                                                                92
Sintaxe SQL - DML
  • Select   :
  SELECT <campo1>,<campo2>,..<campoN>
  FROM <nomeTabela>
  WHERE <campo1> = and <campo2> = <valor2>

  • INSERT
  INSERT INTO <nomeTabela>(<campo1>,<campo2>,..<campoN>
   VALUES (<valor1> , <valor2>, <valorN> ...)

  • UPDATE
  UPDATE <NOME TABELA> SET <CAMPO1 = novoValorCAMPO1 > , <CAMPON =
    novoValorCAMPON .. >
   WHERE <CAMPO COND1> = <VALOR COND1>
         AND <CAMPO CONDN> = <VALOR CONDN>

  • DELETE
  DELETE FROM <NOME TABELA>
   WHERE <CAMPO COND1> = <VALOR COND1>
       and <CAMPO CONDN> = <VALOR CONDN>




27/03/12                                                             93
JDBC
  • JDBC *
           – Disponibilizar uma interface de acesso e
             manipulação de dados para vários bancos
             de dados (Oracle,My SQL, HSQLDB, Access)
           – Qual a versão que utilizaremos desta API ?
             • JDBC 4.0




27/03/12                                              94
JDBC - Arquitetura


                                                   Aplicação Java



                                            Gerenciador de Driver do JDBC


                                                                                JDBC           JDBC
                 JDBC             Ponte
                                                                               Driver C       Driver D
           Driver de Rede A    JDBC-ODBC


                                 ODBC
                                                                            Driver C Nativo
                                 Driver B



                              Driver B Nativo




27/03/12                                                                                                 95
JDBC
 • Principais Interfaces
           – Connection
           – Statement                      JavaDoc
                            http://java.sun.com/j2se/1.5.0/docs/api
           – PreparedStatement
           – CallableStatement
           – ResultSet
           – Driver
  • Principais Classes
           – DriverManager
           – Timestamp


27/03/12                                                              96
JDBC – Sintaxe de Acesso
  • A Especificação JDBC define uma sintaxe particular para
    conectar-se com o banco, ela de um endereço de localização
    uniforme (URL).Sua sintaxe básica é definida como:
      jdbc:<nomedodriver>:<subnome>
      Sendo o subnome os parametros de acesso ao banco, estes
      parametros variam de Drivers para drivers.

  Ex:
       Oracle: jdbc:oracle://[hostname]:[port]/[SID_Oracle]

      MySQL: jdbc:mysql://[hostname]:[port]/[databesename]

      DERBY : jdbc:derby://[hostname]:[port]/[databesename]




27/03/12                                                         97
Um programa JDBC mínimo
  •        public static void main (String[] args) throws Exception   {
  •
  •            //Class.forName("org.apache.derby.jdbc.ClientDriver");
  •            Class.forName("com.mysql.jdbc.Driver");
  •            Connection conn = DriverManager
  •                             .getConnection(
  •                               "jdbc:mysql://localhost:3306/fastbuy“
  •                             , "fastbuy“
  •                             ,"fastbuy");

  •               Statement stmt = conn.createStatement();
  •               ResultSet rset = stmt.executeQuery(
  •                                          "select * from organizacao");
  •               while (rset.next()) {
  •                   System.out.println("Valor = " + rset.getString(1));
  •               }
  •
  •        }




27/03/12                                                                     98
Um programa JDBC mínimo
   Registra o Driver Provido pelo Fornecedor


           Class.forName("com.mysql.jdbc.Driver");

             Classe DriverManager retorna um Obj Instanciado da Interface Connection


                Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/fastbuy","fastbuy","fastbuy”);

                       A Partir de agora estou Conectado no Banco !!

                   Obj. Connection prove o Executor (Statement) de Comandos no Banco.

                       Statement stmt = conn.createStatement();

                        Posso Enviar uma instrução, comando para o Banco

                       O Executor pode ou não Obter um Conjunto de Dados (ResultSet)
                           do Banco

                          ResultSet rset = stmt.executeQuery("select * from organizacao");




27/03/12                                                                                     99
JDBC – java.sql
  • Diagrama de Classes


                                                 Quem Prove a
                                                 Classe Concreta ??




   Veremos com mais Detalhes as interfaces Connection, Statement,
   PreparedStatement , ResultSet
27/03/12                                                              100
JDBC - Connection
  • Interface Connection:              Representa a Seção do
      usuário no banco, tem como objetivo prover informações sobre
      o banco , prover mecanismo para execução de Comandos SQL
      neste.
  • Principais Métodos da Interface Connection

  createStatement : Responsável por retornar uma instância concreta da
      Interface Statement.


  prepareStatement : Responsável por retornar uma instância concreta da
      Interface PreparedStatement


  prepareCall : Responsável por retornar uma instância concreta da
      Interface CallableStatement




27/03/12                                                                 101
JDBC - Statement
  • Interface Statement:            Utilizado pela execução de uma
      instrução SQL estática e retornar o produto da instrução.

  • Principais Métodos da Interface Statement

  execute : Responsável por executar uma instrução SQL que pode retornar um
      conjunto de resultados.

  executeQuery : Responsável por executar uma instrução SQL que pode retornar
      um objeto (ResultSet) de resultado

  executeUpdate : Responsável por executar uma instrução SQL de atualização
      (INSERT,UPDATE,DELETE) retornando somente o volume de dados alterados.

  executeBatch : Responsável por executar um conjunto de instruções (batch) SQL,
      este medoto deve ser utilizado após a chamada do método addBatch.

  addBatch : Responsável por adicionar uma uma instrução SQL na fila de comandos
      para execução futura (executeBatch).




27/03/12                                                                           102
JDBC - PreparedStatement
  • Interface PreparedStatement:                   Utilizado para a
      execução de uma instrução SQL dinâmica e retornar o produto da
      instrução, estende a interface Statement

  Principais Métodos da Interface PreparedStatementBoa
                                                              Prá
                                                                    tica
  execute : Responsável por executar uma instrução SQL que pode
      retornar um conjunto de resultados.

  executeQuery : Responsável por executar uma instrução SQL que pode
      retornar um objeto (ResultSet) de resultado

  executeUpdate : Responsável por executar uma instrução SQL de
      atualização (INSERT,UPDATE,DELETE) retornando somente o volume de
      dados alterados.

  Veremos mais detalhes sobre Statement X PreparedStatement




27/03/12                                                                   103
JDBC - ResultSet
  • Interface ResultSet:             Utilizado para representar uma coleção
      (cursor) de dados obtidos do Banco de Dados, gerado por uma
      instrução executada por um Statement.Ela prove métodos de
      navegação (iteração) com o conjunto de dadas obtidos e também prove
      métodos para acesso a cada coluna (atributo) obtida.


  Principais Métodos da Interface PreparedStatement


  next : Responsável por mover o cursor para próximo registro e
      retornando verdadeiro ou falso (true|false).


  getString, getInt, getDouble, getFloat, getCursor etc..           :
  São métodos para obtenção do valor contido em cada coluna retornada pelo
    comando.




27/03/12                                                                  104
Exercício
  • Vamos criar uma Classe Chamada de
    TesteJDBC. Nela implementaremos os
    métodos realizarão as operações de
    CRUD (Create, Read, Update, Delete)
           – Criaremos os Seguintes métodos
             • executeQuery()
             • executeInsert()
             • executeUpDate()
             • executeDelete()




27/03/12                                      105
Lendo Dados do Banco
  public static void executeQuery() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://maquinaintrutor:3306/fastbuy“
                            , “fastbuy “
                            , “fastbuy");
        System.out.println("Caraca ... maluco to no banco ... ");
        Statement stmt = conn.createStatement();
        ResultSet rset = stmt.executeQuery("select * from organizacao");
        while (rset.next()) {
            System.out.println(“ID Org :" + rset.getInt(“idorg"));
            System.out.println("Nome :" + rset.getString(“nome"));
            System.out.println("--");
         }
    } catch (SQLException ex) {
    } catch (ClassNotFoundException ex) {
    }
  }




27/03/12                                                                   106
Inserindo Dados no Banco
  public static void executeInsert() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://maquinaintrutor:3306/fastbuy“
                            , “fastbuy “
                            , “fastbuy");
        Statement stmt = conn.createStatement();
        int i = stmt.executeUpdate("insert into organizacao " +
                              " (nome,cnpj,status,ramoatividade) “ +
                              “ values (‘Eduardo Corp’,‘23333’, ‘aberto’ “ +
                              “ , ‘varejo’ , ‘juridica’ );

      } catch (SQLException ex) {
      } catch (ClassNotFoundException ex) {
      }
  }




27/03/12                                                                       107
Atualizando Dados no Banco
  public static void executeUpdate () {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://maquinaintrutor:3306/fastbuy“
                            , “fastbuy “
                            , “fastbuy");
        Statement stmt = conn.createStatement();
        int i = stmt.executeUpdate(“update organizacao set " +
                              “ nome = ‘Bisso Corporation’ where cnpj = ‘23333’ “;
    } catch (SQLException ex) {
    } catch (ClassNotFoundException ex) {
    }
  }




27/03/12                                                                             108
Excluindo Dados no Banco
  public static void executeUpdate () {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://maquinaintrutor:3306/fastbuy“
                            , “fastbuy “
                            , “fastbuy");
        Statement stmt = conn.createStatement();
        int i = stmt.executeUpdate(“delete from organizacao where cnpj = ‘23333’ “;
    } catch (SQLException ex) {
    } catch (ClassNotFoundException ex) {
    }
  }




27/03/12                                                                          109
Qual a diferença ?
  • Qual a diferença entre os métodos
           – executeQuery()
           – executeInsert()
           – executeUpDate()
           – executeDelete()




27/03/12                                110
JDBC : Como Aplicá-lo e AONDE ?
  • Divisão da Aplicação por camadas de
    responsabilidade:


    Visualização
                                                 Qual o Pattern
     Controle                                    Responsável
                                                 por
                                                 Gerenciar a
    Modelo                                       Camada de
                                                 Persistência ?
                     Camada de Negócio



           Camada de Integração e Persistência      DAO

27/03/12                                                          111
JDBC : Como Aplicá-lo e AONDE ?
  • Aonde aplicá-lo nós vimos, e qual o
    pattern responsável por isso ? Como e
    devo criá-lo ?
  • Para Demonstrar utilização do JDBC nós
    iniciaremos um projeto novo, que visa
    atender as necessidades do processo de
    compra de materiais de escritório de
    uma grande empresa.



27/03/12                                 112
Projeto FastBuy
  • Criaremos um conjunto de classes que
    representarão a lógica de negócio de um
    sistema de compras de materiais indiretos.
  • Definiremos as grandes entidades envolvidas,
    para elas atribuiremos um conjunto de
    atributo que comporão o modelo de negócio.
  • Conforme o andamento do projeto serão
    apresentados os padrões de projeto mais
    utilizados em cada camada da aplicação.




27/03/12                                       113
Projeto FastBuy
  • Entidades Envolvidas
           – Dados Mestres
             • Materiais
             • Organização
             • Usuários
           – Módulo de Compras
             • Pedido de Compra




27/03/12                          114
Projeto FastBuy - VOs




27/03/12                 115
Projeto FastBuy
  • Camada de Persistência




27/03/12                     116
Projeto FastBuy
  • Construção de Baixo para Cima.
           – Desenvolver os componentes de infra-estrutura antes de
             construir os componentes da camada de negócio e
             apresentação, ou seja inicie sempre pelo DAO/VO.




27/03/12                                                              117
Criando o Projeto no NeatBeans
  • Copiar o Diretório contida na pasta do
    instrutor chamada FastBuyERP.
           - Sub Diretórios
             - src - Código Fonte.
             - lib - Bibliotecas
             - model – diagramas
           - Crie um projeto baseado em um código que
             já exista.




27/03/12                                            118
Projeto FastBuy
  • Vamos Olhar a implementação da Classe
    EnderecoDAO, que se encontra no package:
    br.com.season.fastbuyerp.persistencia
  • Vamos verificar o metodo
                   getEndereco (String login)

  • Vamos aplicar a escada de acessos ... !!!




27/03/12                                        119
Projeto FastBuy
  • Atividade em Grupo:
           – Vamos criar o método:
              public EnderecoVO getEndereco(long idEndereco)
  • Atividade em CASA :
           – Implementar o DAO de PedidoCompra utilizem os DAOs
             implementados como base.




27/03/12                                                          120
Aula 6
  • Interface Gráfica
           –   Arquitetura
           –   Diferenças entre AWT / Swing
           –   Componentes e Eventos
           –   Fazendo nossa primeira tela
  • MVC
           – Arquitetura e classe da aplicação com banco de
             dados
           – Fazendo uma aplicação de cadastro com JDBC
           – Construção da tela de cadastro
           – Reutilizando a tela de cadastro para Atualização
           – Monstrando mensagens para o usuário com
             JOptionPanel

27/03/12                                                        121
Camada UI – Swing
  O que é ?
  Com o Java 1.2 ele se tornou o novo toolkit gráfico substituindo os
    componentes visuais do AWT e acrescentando muitas novas
    funcionalidades. Os componentes visuais são escritos
    inteiramente em Java, o que garante recursos e comportamento
    independente da plataforma. Isso a torna também “diferente”
    das aplicações nativas, no seu visual e comportamento. Apesar
    do recurso de look-and-feels personalizados (Basicamente uma
    capacidade de temas para o Swing), e o mesmo com as
    melhorias nas ultimas versões do Java, ainda é possivel
    perceber claramente quando uma aplicação e puro-Java ou
    quando ela usa um toolkit nativo (Dephi, VB) no Windows, ou
    no Gnome e KDE no Linux (Isso não é necessariamente uma
    desvantagem).
  O Swing também implementa muitos design patters orientados a
    objetos, o que o torna o toolkit gráfico mais flexível, extensível
    e poderoso do mercado, porém este recurso traz um custo
    significativo em performance e Curva de Aprendizado.




27/03/12                                                             122
Swing no Java 1.6




27/03/12             123
Swing - Arquitetura

                                                         Note que o Swing e o AWT
                                       Componentes
                                                         duplicam parte da funcionalidade
                                          MVC            gráfica básica fornecida pela
                                                         plataforma nativa (anti-aliasing de
                                                         textos, efeitos com janelas e
                 Swing                                   vários outros recursos ), que o
                                       Componentes
                                       Sofisticados
                                                         torna mais difícil das aplicações
                                                         Java se beneficiarem de hardware
                                                         gráfico acelerado e outras
                                                         otimizações do sistema
                                                         operacional. Isso contribui em
                                   Primitivas Gráficas   parte para a percepção de
                                    e Componentes        “lentidão” de aplicações Swing
                  AWT                   Simples
                                                         otimizadas.

                                          Acesso ao
           Sistema Gráfico do SO
                                          Hardwarde




27/03/12                                                                                   124
Swing - Pacotes
  javax.swing - Provides a set of "lightweight" (written in Java with no native code) components
     that, to the maximum degree possible, work the same on all platforms.
  javax.swing.colorchooser - Contains classes and interfaces used by the JColorChooser
     component.

  javax.swing.event - Provides support for events fired by Swing components.

  javax.swing.filechooser - Contains classes and interfaces used by the JFileChooser
     component.

  javax.swing.plaf - Provides one interface and many abstract classes that Swing uses to
       provide its pluggable look and feel capabilities.
  all painting is delegated.

  javax.swing.table - Provides classes and interfaces for dealing with JTable.

  javax.swing.text - Provides classes and interfaces that deal with editable and non-editable
     text components.

  javax.swing.text.rtf - Provides a class (RTFEditorKit) for creating Rich Text Format text
     editors.
  javax.swing.tree - Provides classes and interfaces for dealing with JTree.

  javax.swing.undo - Allows developers to provide support for undo/redo in applications such as
     text editors.



27/03/12                                                                                        125
Swing - Componentes
  •   JLabel
  •   JButton
  •   JTextField
  •   JRadioButton
  •   JCheckBox
  •   JComboBox
  •   JList
  •   JProgressBar
  •   JTabbedPane
  •   JTree
  •   JTable
  •   JMenuBar
  •   JToolBar

27/03/12               126
Swing – 1º Componentes
  •         Nosso Primeiro Componente
           – Vamos Criar a classe Main no pacote :
              • br.com.fastbuy.view.gui

  Vamos criar nosso
  primeiro componente
  Swing.

  1. Acesse o menu
  New File do NeatBeans.

  2. Selecione a opção
  Java Gui Form e
  JFrame Form




27/03/12                                             127
Swing – 1º Componente

                    Componentes Utilizados

                    -JFrame (Container)
                    -JPanel
                    -JLabel
                    -JTextField
                    -JToolBar
                    -JButton
                    -JScrollBar
                    -JTable
                    -JComboBox
                    -JSeparator




27/03/12                                  128
Swing – 1º Componente
  • Boas Praticas
           – Alterar nome dos Componentes para nomes compreensíveis, ou seja , não
             utilize JTextField1, textA , etc ... Utilize o nome do atributo que ele
             representa. Por Exemplo um JTextField que conterá o atributo ‘nome” defina
             o nome do componente como nomeTxt ou txtNome.




27/03/12                                                                              129
Swing – 1º Componente

                    Componentes Utilizados

                    -JFrame (Container)
                    -JPanel
                    -JLabel
                    -JTextField
                    -JToolBar
                    -JButton
                    -JScrollBar
                    -JTable
                    -JComboBox




27/03/12                                  130
Swing – 1º Componente

                    Componentes Utilizados

                    -JFrame (Container)
                    -JPanel
                    -JLabel
                    -JTextField
                    -JToolBar
                    -JButton
                    -JScrollBar
                    -JTable
                    -JComboBox




27/03/12                                  131
Swing Customizando Componentes
 •    Os componentes Swing são Segregados em três camadas ( Model, View,
      Controler) , quando adicionamos um JButton no nosso formulário, na verdade
      estamos adicionando um controlador, que gerencia a camada de Apresentação e
      Modelo deste Componente.
 •    Os componente Swing JButton , JLabel ,
      JList , JTable são controladores que
      gerenciam os Componentes de "PLAF“
      (Pluggable Look-And-Feel) como por ex :
      javax.swing.plaf.ButtonUI e também os
      componentes de Modelo que são os responsáveis pelo comportamento do
      componente Button. Este tipo de arquitetura é o diferencial das Aplicações Swing
      comparado com outros framework GUI de mercado (Delphi , Visual Basic).
 •    Isso proporciona maior escalabilidade referente a Look and Feel e customização
      do comportamento de cada componente, ou seja, ganho de capacidade de aplicar
      Skins a minha apresentação sem afetar o comportamento do componente.




27/03/12                                                                            132
Swing Customizando Componentes
  •   Também posso alterar o comportamento dos componentes existentes. Por exemplo: Por
      Default um JTable não é capaz de identificar se uma determinada célula (LinhaXColuna)
      deverá ter a cor da Fonte Vermelha ou Exibir uma Imagem baseado no conteúdo ou ainda
      exibir uma ComboBox com uma lista de valores possíveis para aquela célula. Então vamos
      observar como é a relação do Componente JTable (Controle) com outras classes e
      interfaces.




27/03/12                                                                                       133
Swing – Trabalhando com Eventos




27/03/12                           134

Más contenido relacionado

La actualidad más candente (20)

Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Fundamentos Java - 01
Fundamentos Java - 01Fundamentos Java - 01
Fundamentos Java - 01
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Aula 1a.ppt
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Curso de Java (Parte 5)
Curso de Java (Parte 5)Curso de Java (Parte 5)
Curso de Java (Parte 5)
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Manual
ManualManual
Manual
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Introdução ao java
Introdução ao javaIntrodução ao java
Introdução ao java
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
Aula1
Aula1Aula1
Aula1
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 

Destacado

Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Introdução a Orientaçãoo a Objetos
Introdução a Orientaçãoo a ObjetosIntrodução a Orientaçãoo a Objetos
Introdução a Orientaçãoo a ObjetosFernando Machado
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasBreno Vitorino
 
Programacao basica em java
Programacao basica em javaProgramacao basica em java
Programacao basica em javaJhunior Alves
 
Programação orientada a_objetos
Programação orientada a_objetosProgramação orientada a_objetos
Programação orientada a_objetosClaudio Araujo
 
POO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfacePOO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfaceFelipe J. R. Vieira
 
Internet das Coisas com Java e Things API
Internet das Coisas com Java e Things APIInternet das Coisas com Java e Things API
Internet das Coisas com Java e Things APIGlobalcode
 
Palestra Sepai Alfredofurtado Introducao Ao Javafx
Palestra Sepai Alfredofurtado Introducao Ao JavafxPalestra Sepai Alfredofurtado Introducao Ao Javafx
Palestra Sepai Alfredofurtado Introducao Ao Javafxalfredofurtado
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaGlobalcode
 
Campus Party 2014 - Internet das Coisas com coisas reais
Campus Party 2014 - Internet das Coisas com coisas reaisCampus Party 2014 - Internet das Coisas com coisas reais
Campus Party 2014 - Internet das Coisas com coisas reaisGlobalcode
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem PráticaEder Magalhães
 
JavaFx - Guia Prático
JavaFx - Guia PráticoJavaFx - Guia Prático
JavaFx - Guia Práticodanielfc
 

Destacado (20)

Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Introdução a Orientaçãoo a Objetos
Introdução a Orientaçãoo a ObjetosIntrodução a Orientaçãoo a Objetos
Introdução a Orientaçãoo a Objetos
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
Curso de Java #05 - Swing e JavaFX
Curso de Java #05 - Swing e JavaFXCurso de Java #05 - Swing e JavaFX
Curso de Java #05 - Swing e JavaFX
 
Programacao basica em java
Programacao basica em javaProgramacao basica em java
Programacao basica em java
 
Apostila Java
Apostila JavaApostila Java
Apostila Java
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Programação orientada a_objetos
Programação orientada a_objetosProgramação orientada a_objetos
Programação orientada a_objetos
 
POO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfacePOO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e Interface
 
Internet das Coisas com Java e Things API
Internet das Coisas com Java e Things APIInternet das Coisas com Java e Things API
Internet das Coisas com Java e Things API
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Palestra Sepai Alfredofurtado Introducao Ao Javafx
Palestra Sepai Alfredofurtado Introducao Ao JavafxPalestra Sepai Alfredofurtado Introducao Ao Javafx
Palestra Sepai Alfredofurtado Introducao Ao Javafx
 
Java persintence api
Java persintence apiJava persintence api
Java persintence api
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na prática
 
Ria e Java FX
Ria e Java FXRia e Java FX
Ria e Java FX
 
Campus Party 2014 - Internet das Coisas com coisas reais
Campus Party 2014 - Internet das Coisas com coisas reaisCampus Party 2014 - Internet das Coisas com coisas reais
Campus Party 2014 - Internet das Coisas com coisas reais
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem Prática
 
JavaFx - Guia Prático
JavaFx - Guia PráticoJavaFx - Guia Prático
JavaFx - Guia Prático
 

Similar a Classes Java , JDBC / Swing / Collections

Similar a Classes Java , JDBC / Swing / Collections (20)

Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Java: Collections
Java: CollectionsJava: Collections
Java: Collections
 
Csharp fundamentals
Csharp fundamentalsCsharp fundamentals
Csharp fundamentals
 
Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
 
Aula05
Aula05Aula05
Aula05
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2
 
Slide Share s2 Rodd
Slide Share s2 RoddSlide Share s2 Rodd
Slide Share s2 Rodd
 
Seminário - Java Collections
Seminário - Java CollectionsSeminário - Java Collections
Seminário - Java Collections
 
Curso de Java (Parte 2)
 Curso de Java (Parte 2) Curso de Java (Parte 2)
Curso de Java (Parte 2)
 
Java collections-basic
Java collections-basicJava collections-basic
Java collections-basic
 
Java 8 para o dia a dia
Java 8 para o dia a diaJava 8 para o dia a dia
Java 8 para o dia a dia
 
Resumão java
Resumão javaResumão java
Resumão java
 
Java 14
Java 14Java 14
Java 14
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz Lavieri
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 

Último

Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosLucianoPrado15
 
Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...
Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...
Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...AndreaCavalcante14
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
Antero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escritaAntero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escritaPaula Duarte
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxedelon1
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 

Último (20)

Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...
Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...
Modelo de Plano Plano semanal Educação Infantil 5 anossemanal Educação Infant...
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Antero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escritaAntero de Quental, sua vida e sua escrita
Antero de Quental, sua vida e sua escrita
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 

Classes Java , JDBC / Swing / Collections

  • 1. public JavaIntermediario { public void pacoteJavaStandard() {} public void pacoteJavaIO() {} public void pacoteJDBC() {} public void pacoteSwing() {} } Classes Java Pacotes Standard / JDBC / Swing Autor: Eduardo R. Carvalho email: ercarval@gmail.com @version 1.3
  • 2. Links • 4Shared – http://www.4shared.com/dir/10013955/61c5ad14/02Java_Intermediario.html • MySQL – www.mysql.org • PostGre – http://www.postgresql.org/ • Apache Fundation - Frameworks – www.commons.apache.org • Swing – http://www.java2s.com/Product/Java/Swing/Look-And-Feel-LaF.htm – http://mindprod.com/jgloss/laf.html#MAC 27/03/12 2
  • 3. Glossário de Termos Termo Descrição JDBC Java Data Base Conectivity API Application Program Interface DAO Data Access Object JCP Java Community Process ODBC Object DataBase Conectivity Refactory Reconstruir parte do Programa ANSI American National ?? Institute DML Data Model Language DDL Data Definition Language SQL Structure Query Languare SGBD Sistema Gerenciador de Banco de Dados 27/03/12 3
  • 4. Classes do Pacote java.lang • java.lang.StringBuffer • java.lang.Math • java.lang.Integer • java.lang.Double • java.lang.Boolean • java.lang.Long • java.lang.Float • java.lang.Character • java.lang.Byte • java.lang.Short • java.lang.StringTokenizer 27/03/12 4
  • 5. Aula 1 • Usando a Classe String – Em Java, cada caractere de uma String é um caractere Unicode de 16 bits. Já que caracteres Unicode tem 16 bits (e não os restritos 7 ou 8 bits que a ASCII oferece), um conjunto de caracteres sofisticado e internacional é facilmente representado em Unicode. – Em Java, strings são objetos: String s = new String(“abcdef”); – Ou: String s = “abcdef”; 27/03/12 5
  • 6. Classe String • Usando a Classe String String s2 = s; //s2 aponta para o mesmo //objeto referenciado // por s • O objetivo para a certificação declara: “descrever o significado da inalterabilidade dos objetos String”, portanto, quando um valor for atribuído a uma String, esse nunca poderá ser alterado. Mas isso não significa que sua variável de referência também seja, muito pelo contrário. 27/03/12 6
  • 7. Classe String • Classe String e a Memória – Concatenando Objetos String – Criando novos objetos String 27/03/12 7
  • 8. Classe String • Métodos importantes – concat – equalsIgnoreCase – length – replace – substring – toString – toLowerCase – toUperCase – trim 27/03/12 8
  • 9. Classe StringBuffer • Utilizada para manipulação de grande volumes de Strings, pois não cria novos objetos como a classe String. Então quando necessitar de concatenar grandes volumes de caracteres de preferência a Classe StringBuffer. • Métodos Importantes – append – insert – reverse – toString 27/03/12 9
  • 10. Classe Math • Métodos da Classe Math – abs – ceil – Ffoor – max – min – random – round – sin – cons – tan – sqrt – toDegrees – toRadians 27/03/12 10
  • 11. Objetos Wappers • java.lang.Integer • java.lang.Double • java.lang.Boolean • java.lang.Long • java.lang.Float • java.lang.Character • java.lang.Byte • java.lang.Short 27/03/12 11
  • 12. Objetos Wrappers - Metodos • Método estático valueOf() • Métodos utilitários de conversão das Classes Wrappers – xxxValue() – parseXxx e valueOf – toString 27/03/12 12
  • 13. Aula 2 • Collenctions em Java –java.util •Collections •List •ArrayList •Set •HashSet • hashCode e equals 27/03/12 13
  • 14. Collections • Desvantagens dos arrays: – Arrays não podem ser redimensionados; – É impossível buscar diretamente um elemento para qual não se sabe o índice; – Não é possível saber quantas posições do array já foram populadas sem se criar métodos adicionais; • Collections Framework (pacote java.util): – É uma API robusta e possui diversas classes que representam estruturas de dados avançados em Java. 27/03/12 14
  • 15. Collections – Principais Interfaces • As coleções têm como base a interface Collection, que define métodos para adicionar e remover um elemento, verificar se ele está na coleção entre outras operações (ver Javadoc). • Uma coleção pode implementar diretamente a interface Collection, porém normalmente se usa uma das duas subinterfaces mais famosas: justamente Set e List. • A interface Set, define um conjunto de elementos únicos enquanto a interface List permite a réplica de elementos. 27/03/12 15
  • 16. Collections – Listas [java.util.List] • Um primeiro recurso que a API de Collections traz são listas. Uma lista é uma coleção que permite elementos duplicados e mantendo uma ordenação específica entre os elementos. • Em outras palavras, temos a garantia de que, quando percorrer a lista, os elementos serão encontrados em uma ordem prédeterminada, definida na hora da inserção dos mesmos. • Ela resolve todos os problemas que levantamos em relação a array (busca, remoção, tamanho “infinito”, etc). Esse código já está pronto! • A API de Collections traz a interface java.util.List que especifica o que uma classe deve ser capaz de fazer para ser uma lista. 27/03/12 16
  • 17. Collections – Listas [java.util.List] • Há diversas implementações disponíveis, cada uma com uma forma diferente de representar uma lista. • A implementação mais utilizada da interface List é a ArrayList que trabalha com uma array interna para gerar uma lista portanto ela é mais rápida na pesquisa que sua concorrente, a LinkedList, que é mais rápida na inserção e remoção de itens nas pontas. • Para criar um ArrayList basta chamar o construtor: ArrayList lista = new ArrayList(); • É sempre possível abstrair a lista a partir da interface List: List lista = new ArrayList(); 27/03/12 17
  • 18. Collections – Listas [java.util.List] • Para criar uma lista de nomes (String), podemos fazer: List lista = new ArrayList(); lista.add("Guilherme"); lista.add("Paulo"); lista.add("Sergio"); • A interface List possui dois métodos add, um que recebe o objeto a ser inserido e o coloca no final da lista e um segundo que permite adicionar o elemento em qualquer posição da mesma. 27/03/12 18
  • 19. Collections – Listas [java.util.List] • Notem que em momento algum dizemos qual é o tamanho da lista; podemos acrescentar quantos elementos quisermos que a lista cresce conforme for necessário. • Toda lista (na verdade, toda Collection) trabalha do modo mais genérico possível. Isto é, não há uma ArrayList específica para Strings, outra para Números, outra para Datas etc. Todos os métodos trabalham com Object. 27/03/12 19
  • 20. Collections – Listas [java.util.List] • Assim, é possível criar, por exemplo, uma lista de Contas: Conta c1 = new Conta(); c1.depositar(100); Conta c2 = new Conta(); c2.depositar(200); Conta c3 = new Conta(); c3.depositar(300); List contas = new ArrayList(); contas.add(c1); contas.add(c3); contas.add(c2); 27/03/12 20
  • 21. Collections – Listas [java.util.List] • Para saber quantos elementos há na lista, podemos usar o método size(): System.out.println(contas.size()); • Há ainda um método get(int) que recebe como argumento o índice do elemento que se quer recuperar. Através dele podemos fazer um for para iterar na lista de contas: for(int i = 0; i < contas.size(); i++) { contas.get(i); } 27/03/12 21
  • 22. Collections – Listas [java.util.List] • Mas como fazer para imprimir o saldo dessas contas? Podemos acessar o getSaldo() diretamente após fazer contas.get(i)? Não podemos! Lembrem-se que toda lista trabalha sempre com Object! Assim a referência retornada pelo get(i) é do tipo Object, sendo necessário fazer um casting para Conta se quisermos acessar o getSaldo(): for(int i = 0; i < contas.size(); i++) { ContaCorrente cc = (ContaCorrente) contas.get(i); System.out.println(cc.getSaldo()); } // Notem que a ordem dos elementos não é alterada 27/03/12 22
  • 23. Collections – Listas [java.util.List] • Há ainda outros métodos como remove() que recebe um objeto que se deseja remover da lista; e o contains() que recebe um objeto como argumento e devolve true or false indicando se o elemento está ou não na lista. • A interface List e algumas classes que a implementam podem ser vistas no diagrama a seguir 27/03/12 23
  • 24. Collections – Listas [java.util.List] 27/03/12 24
  • 25. Collections – Listas [java.util.List] • Algumas listas, como a ArrayList, tem acesso aleatório aos seus elementos: a busca por um elemento em uma determinada posição é feita de maneira imediata, sem que a lista inteira seja percorrida. • Neste caso o acesso é feito através do método get(int) e é muito rápido. Caso contrário, percorrer uma lista usando um for como esse que acabos de ver, pode ser desastroso. Ao percorrermos uma listas, devemos usar sempre um Iterator ou o enhanced for, como veremos. 27/03/12 25
  • 26. Collections – Listas [java.util.List] • Uma lista é uma excelente alternativa a um array comum já que temos todos os benefícios de arrays, sem a necessidade de tomar cuidado com remoções, falta de espaço etc. • A outra implementação muito usada (LinkedList), fornece métodos adicionais para obter e remover o primeiro e último elemento da lista. 27/03/12 26
  • 27. Ordenação: Collections.sort • Vimos anteriormente que as listas são percorridas de maneira pré-determinada de acordo com a inclusão dos itens. Mas muitas vezes queremos percorrer a nossa lista de maneira ordenada. A classe Collections traz um método estático sort que recebe um List como argumento e o ordena por ordem crescente. Por exemplo: List lista = new ArrayList(); lista.add("Sérgio"); lista.add("Paulo"); lista.add("Guilherme"); System.out.println(lista); Collections.sort(lista); System.out.println(lista); 27/03/12 27
  • 28. Ordenação: Collections.sort • Ao testarmos o exemplo acima, observamos que primeiro a lista é impressa na ordem de inserção e, depois de chamar o sort, ela é impressa em ordem alfabética. Mas toda lista em Java pode ser de qualquer tipo de objeto, por exemplo, Conta. E se quisermos ordenar uma lista de Conta? Em que ordem a classe Collections ordenará? Pelo saldo? Pelo nome do correntista? Conta c1 = new Conta(); c1.deposita(500); Conta c2 = new Conta(); c2.deposita(200); Conta c3 = new Conta(); c3.deposita(150); 27/03/12 28
  • 29. Ordenação: Collections.sort List<Conta> contas = new ArrayList<Conta>(); contas.add(c1); contas.add(c3); contas.add(c2); Collections.sort(contas); // qual o critério de ordenação? 27/03/12 29
  • 30. Ordenação: Collections.sort • Sempre que falamos em ordenação, precisamos pensar em um critério de ordenação, uma forma de determinar qual elemento vem antes de qual. É necessário instruir o Java sobre como comparar nossas ContaCorrente a fim de determinar uma ordem na lista. • Vamos fazer com que os elementos da nossa coleção implementem a interface java.lang.Comparable, que define o método int compareTo(Object). Este método deve retornar zero se o objeto comparado for igual a este objeto, um número negativo se este objeto for menor que o objeto dado, e um número positivo se este objeto for maior que o objeto dado. 27/03/12 30
  • 31. Ordenação: Collections.sort • Para ordenar as ContaCorrente por saldo, basta implementar o Comparable: public class Conta implements Comparable { ... public int compareTo(Conta outra) { if(this.saldo < outra.saldo) { return -1; } else if(this.saldo > outra.saldo) { return 1; } return 0; } } 27/03/12 31
  • 32. Ordenação: Collections.sort • Com o código anterior, nossa classe tornou-se “comparável”: dados dois objetos da classe, conseguimos dizer se um objeto é maior, menor ou igual ao outro, segundo algum critério por nós definido. No nosso caso, a comparação será feita baseando-se no saldo da conta. • Repare que o critério de ordenação é totalmente aberto, definido pelo programador. Se quisermos ordenar por outro atributo (ou até por uma combinação de atributos), basta modificar a implementação do método compareTo na classe. • Agora sim, quando chamarmos o método sort de Collections ele saberá como fazer a ordenação da lista; ele usará o critério que definimos no método compareTo. 27/03/12 32
  • 33. Ordenação: Collections.sort • Mas e o exemplo anterior, com uma lista de Strings? Porque a ordenação funcionou naquele caso sem precisarmos fazer nada? Simples: quem escreveu a classe String (lembrem-se que ela é uma classe normal do Java) implementou a interface Comparable e o método compareTo para Strings, fazendo comparação em ordem alfabética. 27/03/12 33
  • 34. Collections : Conjuntos – java.util.Set • Um conjunto (Set) funciona de forma análoga aos conjuntos da matemática, ele é uma coleção que não permite elementos duplicados: 27/03/12 34
  • 35. Collections – Conjuntos – java.util.Set 27/03/12 35
  • 36. Collections – Conjuntos – java.util.Set • Outra característica fundamental é o fato de que a ordem em que os elementos são armazenados pode não ser a ordem na qual eles foram inseridos no conjunto. • Tal ordem varia de implementação para implementação. • Um conjunto é representado pela interface Set e tem como suas principais implementações as classes HashSet e TreeSet. 27/03/12 36
  • 37. Collections – Conjuntos – java.util.Set • O código a seguir cria um conjunto e adiciona três itens, apesar de tentar adicionar quatro: Set conjunto = new HashSet(); conjunto.add("item 1"); conjunto.add("item 2"); conjunto.add("item 3"); conjunto.add("item 3"); // imprime a sequência na tela System.out.println(conjunto); • O resultado são os elementos do conjunto, a ordem na qual eles aparecem podem ou não ser a ordem na qual eles foram inseridos e é incorreto supor que será sempre a mesma ordem! 27/03/12 37
  • 38. Collections – Percorrendo Coleções • Como percorrer os elementos de uma coleção? Se for uma lista, podemos sempre utilizar um laço for, chamando o método get para cada elemento. Mas e se a coleção não permitir indexação? • Por exemplo, um Set não possui uma função para pegar o primeiro, o segundo ou o quinto elemento do conjunto... • Toda coleção fornece acesso a um iterator, um objeto que implementa a interface Iterator, que conhece internamente a coleção e dá acesso a todos os seus elementos, como a figura a seguir: 27/03/12 38
  • 39. Collections – Percorrendo Coleções 27/03/12 39
  • 40. Collections: Ordenando um Set • Seria possível usar uma outra implementação de conjuntos, como um TreeSet, que insere os elementos, de tal forma, que quando forem percorridos, aparecem em uma ordem definida pelo método de comparação entre seus elementos. Esse método é definido pela interface Comparable. 27/03/12 40
  • 41. Collections – Percorrendo Coleções • Primeiro criamos um Iterator que entra na coleção. • A cada chamada do método next(), o Iterator retorna o próximo objeto do conjunto. • Um iterator pode ser obtido com o método iterator() de Collection, por exemplo: Iterator i = lista.iterator(); • A interface Iterator possui dois métodos principais: hasNext() indica se ainda existe um elemento a ser percorrido e next() retorna o próximo objeto. 27/03/12 41
  • 42. Collections – Percorrendo Coleções • Voltando ao exemplo do conjunto de strings, vamos percorrer o conjunto: // popula o conjunto Set conjunto = new HashSet(); conjunto.add(“item 1”); conjunto.add(“item 2”); conjunto.add(“item 3”); // retorna o iterator Iterator i = conjunto.iterator(); // continua 27/03/12 42
  • 43. Collections – Percorrendo Coleções while (i.hasNext()) { // recebe a palavra Object elemento = i.next(); String palavra = (String) elemento; // mostra a palavra System.out.println(palavra); } . 27/03/12 43
  • 44. Collections – Percorrendo Coleções • O while anterior só termina quando todos os elementos do conjunto forem percorridos, isto é, quando o método hasNext mencionar que não existem mais itens. • Em que ordem serão acessados os elementos? • Numa lista, os elementos irão aparecer de acordo com o índice em que foram inseridos, isto é, de acordo com o que foi prédeterminado. • Em um conjunto, a ordem depende da implementação da interface Set. • Por que o Set é então tão importante e usado? • Para perceber se um item já existe em uma lista é muito mais rápido usar um Set do que um List, e os TreeSets já vem ordenados de acordo com as características que desejarmos! 27/03/12 44
  • 45. Collections – Principais Interfaces • A busca em um Set pode ser mais rápida que em um objeto do tipo List, pois diversas implementações utilizam tabelas de espalhamento (hashtables), trazendo a busca para tempo linear. • A interface Map faz parte do framework mas não estende Collection. (veremos Map mais adiante). 27/03/12 45
  • 46. Collections – Principais Interfaces 27/03/12 46
  • 47. Collections : Mapas – java.util.Map • Um mapa é composto de uma associação de um objeto chave a um objeto valor. É equivalente ao conceito de dicionário usado em várias linguagens. Algumas linguagens, como Perl ou PHP, possuem suporte nativo a mapas, onde são conhecidos como matrizes associativas. • Ele é um mapa pois é possível usá-lo para mapear uma chave, por exemplo: mapeie o valor “Season” à chave “escola”, ou mapeie “Avenida Nelson D'Avila” à chave “rua”. 27/03/12 47
  • 48. Collections : Mapas – java.util.Map 27/03/12 48
  • 49. Collections : Mapas – java.util.Map • O método put(Object, Object) da interface Map recebe a chave e o valor de uma nova associação. Para saber o que está associado a um determinado objeto-chave, passa-se esse objeto no método get(Object). • Observem o exemplo: criamos duas contas e as colocamos em um mapa associando-as ao seu dono respectivamente. 27/03/12 49
  • 50. Collections – Mapas – java.util.Map Conta c1 = new Conta(); c1.depositar(10000); Conta c2 = new Conta(); c2.depositar(3000); // cria o mapa Map mapaDeContas = new HashMap(); // adiciona duas chaves e seus valores mapaDeContas.put("diretor", c1); mapaDeContas.put("gerente", c2); // qual a conta do diretor? Object elemento = mapaDeContas.get("diretor"); Conta contaDoDiretor = (Conta) elemento; 27/03/12 50
  • 51. Collections : Mapas – java.util.Map • Um mapa, assim como as coleções, trabalha diretamente com Objects (tanto na chave quanto no valor), o que torna necessário o casting no momento que recuperar elementos. • Suas principais implementações são o HashMap e o Hashtable. • Apesar do mapa fazer parte do framework, ele não implementa a interface Collection, por ter um comportamento bem diferente. Porém, as coleções internas de um mapa (a de chaves e a de valores) são acessíveis por métodos definidos na interface Map. • O método keySet() retorna um Set com as chaves daquele mapa, e o método values() retorna a Collection com todos os valores que foram associados a alguma das chaves. • Um mapa importante é a tradicional classe Properties, que mapeia strings e é muito utilizada para a configuração de aplicações. 27/03/12 51
  • 52. Collections : Mapas – java.util.Map 27/03/12 52
  • 53. Object Cliente Cliente cliente = new Cliente()
  • 54. Collections – Equals e HashCode • Muitas das coleções do Java guardam os objetos dentro de tabelas de hash. Essas tabelas são utilizadas para que a pesquisa de um objeto seja feira de maneira rápida. • Como funciona? Cada objeto é “classificado” pelo seu hashCode, e com isso conseguimos espalhar cada objeto agrupando-os pelo hashCode. Quando formos buscar um determinado objeto, só vamos procurar entre os elementos que estão no grupo daquele hashCode. Dentro desse grupo vamos testando o objeto procurado com o candidato usando equals(). 27/03/12 54
  • 55. Collections – Equals e HashCode • Para que isso funcione direito, o método hashCode de cada objeto deve retornar o mesmo valor para dois objetos se eles são considerados equals. Em outras palavras: a.equals(b) implica a.hashCode() == b.hashCode() • Implementar hashCode de tal maneira que ele retorne valores diferentes para dois objetos considerados equals quebra o contrato de Object, e resultará em collections que usam espalhamento (como HashSet, HashMap e Hashtable) não achando objetos iguais dentro de uma mesma coleção. 27/03/12 55
  • 56. Exercícios 1) Criar duas classe filhas de Conta: ContaCorrente e ContaPoupanca. Agora, criar na classe Banco, uma lista de Contas. Repare que nessa lista de Contas podemos colocar tanto ContaCorrente quanto ContaPoupanca. Criar um metodo void addConta(Conta c), um método Conta getConta(int x) e outro int totalDeContas(). 2) Criar um método na classe Banco que busca por uma determinada Conta e informar se ela se encontra lá. 3) Criar um código que insira 100 mil números numa ArrayList e pesquise-os. Vamos usar um método da classe System para cronometrar o tempo gasto. 4) Troque a ArrayList por um HashSet e verifiquem o tempo que vai demorar. 27/03/12 56
  • 57. Aula 3 • Mais de java.util Trabalhando com Datas Manipulação de Arquivos Serialização de Objetos 27/03/12 57
  • 58. Trabalhando com Datas • Trabalhar com Datas é uma das coisas mais trabalhosas em qualquer linguagem de programação. Aquelas que usam bancos de dados exigem do desenvolvedor um esforço maior ainda. Formatar a saída destes dados também pode ser um problema quando a formatação depende do local do usuário – ou seja, na internet estamos falando do mundo inteiro. • A linguagem Java oferece um rico conjunto de classes para manipular datas. As principais classes para manipulação de datas pertence os pacote • java.util: – java.util.Date – java.util.Calendar – java.util.GregorianCalendar 27/03/12 58
  • 59. Trabalhando com Datas • A classe Date representa, por default, a data corrente do sistema em milisegundos. • Anteriormente a versão 1.1 do Java, a classe Date suportava a criação de datas a partir de parâmetros como dia, mês, ano, horas, minutos, etc, e também a formatação e o parsing de strings para Datas. Porém, essas funções foram depreciadas por não suportarem internacionalização. • A partir da versão 1.1, as classes Calendar e DateFormat foram inseridas na API e devem ser usadas para conversão entre campos de datas e horas para Date e formatação e parsing, respectivamente. • Para instanciar um objeto Date: Date hoje = new Date(); System.out.println("A data de hoje é: " + hoje); 27/03/12 59
  • 60. Trabalhando com Datas • A classe abstrata Calendar também encapsula um momento no tempo representado em milissegundos. • Também provê métodos para manipulação desse momento. • A subclasse concreta de Calendar mais usada é a GregorianCalendar que representa o calendário usado pela maior parte dos países (outras implementações existem, como a do calendário budista BuddhistCalendar, mas que são internas e devolvidas de acordo com suas respectivas localizações). 27/03/12 60
  • 61. Trabalhando com Datas • Para obter um Calendar que encapsula o instante atual (data e hora), usamos o método estático getInstance() (familiar?) de Calendar: Calendar c = Calendar.getInstance(); System.out.println(“Dia do Mês:“ + c.get(Calendar.DAY_OF_MONTH)); System.out.println(“Dia da Semana:“ + c.get(Calendar.DAY_OF_WEEK)); • No exemplo acima, imprimimos o dia de hoje e o dia da semana correspondente. Note que o dia da semana devolvido é um inteiro que representa o d dia da semana (Calendar.MONDAY, etc.) 27/03/12 61
  • 62. Trabalhando com Datas • A partir de um Calendar, podemos saber o valor de seus campos, como ano, mês, dia, hora e minuto. Para isso, usamos o método get que recebe um inteiro representando o campo; os valores possíveis estão em constantes na própria classe Calendar. • Da mesma forma que podemos obter os valores dos campos, podemos atribuir novos valores a esses campos por meio dos métodos set. Há diversos métodos set em Calendar. O mais geral é o que recebe dois argumentos: o primeiro indica qual é o campo (usando as constantes de Calendar) e o segundo, o novo valor. Além desse método set, outros métodos set recebem valores de determinados campos; o set de três argumentos, por exemplo, recebe ano, mês e dia. 27/03/12 62
  • 63. Trabalhando com Datas • Vejamos um exemplo de como alterar a data de hoje: Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR, 10); c.set(Calendar.MINUTE, 30); c.set(2005, 12, 25); • Outro método bastante usado é add que adiciona uma certa quantidade a qualquer campo do Calendar. Por exemplo, para adicionar um ano à data de hoje: Calendar c = Calendar.getInstance(); c.add(Calendar.YEAR, 1); // adiciona 1 ao ano • Note que, embora o método se chame add, também podemos usá-lo para subtrair valores, bastando colocar uma quantidade negativa no segundo argumento. 27/03/12 63
  • 64. Trabalhando com Datas • Os métodos after e before são usados para comparar o objeto Calendar em questão a outro Calendar. O método after devolverá true quando o Calendar em questão estiver num momento no tempo maior que o do Calendar passado como argumento. Por exemplo, after devolverá false se compararmos o Dia das Crianças com o Natal, pois o Dia das Crianças não vem depois do Natal: Calendar c1 = new GregorianCalendar(2005, Calendar.OCTOBER, 12); Calendar c2 = new GregorianCalendar(2005, Calendar.DECEMBER, 25); System.out.println(c1.after(c2)); // imprime false 27/03/12 64
  • 65. Trabalhando com Datas • Analogamente, o método before verifica se o momento em questão vem antes do momento do Calendar passado como argumento. No exemplo anterior, c1.before(c2) devolverá true, pois o Dia das Crianças vem antes do Natal. • Notem que Calendar implementa a interface Comparable. Isso quer dizer que podemos usar o método compareTo para comparar dois calendários. No fundo, after e before usam o compareTo para dar suas respostas. 27/03/12 65
  • 66. Trabalhando com Datas • Por default, em Java, datas consideradas inválidas, como “35/08/1981” por exemplo, são “roladas”, ou seja, transformadas em datas válidas, adicionando os dias excedentes. A data 35/08/1981 será rolada para a seguinte data válida: 04/09/1981. Porém, caso uma data inválida seja informada, há uma maneira de evitar que essa transformação ocorra e uma exceção lançada. • Para desabilitar esse comportamento é necessário utilizar o método setLenient(boolean), que evita a rolagem de data e lança uma exceção. 27/03/12 66
  • 67. Trabalhando com Datas • Exercício: – Criar um método que verifique o intervalo entre duas datas e retorne o número de dias, dado dois objetos Calendar como argumentos. 27/03/12 67
  • 68. Trabalhando com Datas • O cálculo é feito pegando a diferença entre as datas em milissegundos e dividindo esse valor pelo número de milissegundos em um dia: public int diferencaEmDias(Calendar c1, Calendar c2) { long m1 = c1.getTimeInMillis(); long m2 = c2.getTimeInMillis(); Double d = new Double(((m2 - m1) / (24*60*60*1000))); return d.intValue(); } 27/03/12 68
  • 69. Manipulando Arquivos • Assim como todo o resto das bibliotecas em Java, a parte de controle de entrada e saída de dados (conhecido como I/O) é orientada a objetos e usa os principais conceitos mostrados até agora: interface, classes abstratas e polimorfismo. • A idéia atrás do polimorfismo no pacote java.io é de utilizar fluxos de entrada (InputStream) e de saída (OutputStream) para toda e qualquer operação, seja ela relativa a um arquivo, a uma conexão remota via sockets ou até mesmo a entrada e saída padrão de um programa (normalmente o teclado e o console). 27/03/12 69
  • 70. Manipulando Arquivos • As classes abstratas InputStream e OutputStream definem respectivamente o comportamento padrão dos fluxos em Java: em um fluxo de entrada é possível ler bytes e no fluxo de saída escrever bytes. • A grande vantagem dessa abstração pode ser mostrada em um método qualquer que utiliza um OutputStream recebido como argumento para escrever em um fluxo de saída. Para onde o método está escrevendo? Não se sabe e não importa: quando o sistema precisar escrever em um arquivo ou em uma socket basta chamar o mesmo método! 27/03/12 70
  • 71. InputStream: Lendo bytes • Vamos ler um byte de um arquivo: class TestaEntrada { public static void main(String[] args) throws IOException { InputStream is = new FileInputStream("arquivo.txt"); int b = is.read(); } } • A classe InputStream é abstrata, e FileInputStream uma de suas filhas. Ela recebe uma String que é o nome do arquivo como argumento pelo construtor. Ela vai procurar o arquivo no diretório em que o java foi invocado (no caso do Eclipse vai ser dentro do diretório do projeto). Podemos usar um caminho absoluto. 27/03/12 71
  • 72. InputStream: Lendo bytes • Quando trabalhamos com java.io, diversos métodos lançam IOException, que é uma exception do tipo checked, o que nos obriga a tratá-la ou lançá-la. • Estamos aqui declarando IOException através do throws do main apenas para facilitar o exemplo, caso a exception ocorra a JVM vai parar mostrando a stacktrace. • InputStream tem diversas filhas, como ObjectInputStream, AudioInputStream, ByteArrayInputStream, entre outras. 27/03/12 72
  • 73. InputStreamReader: lendo chars • Para recuperar um caractere precisamos traduzir os bytes com o encoding dado para o respectivo código unicode. Escrever esse decoder é muito complicado. Mas o Java já nos oferece uma classe que faz isso, que é a classe InputStreamReader: class TestaEntrada { public static void main(String[] args) throws IOException { InputStream is = new FileInputStream("arquivo.txt"); InputStreamReader isr = new InputStreamReader(is); int c = isr.read(); } } • O construtor de InputStreamReader pode receber o character encoding a ser utilizado como parâmetro, se desejado, tais como UTF-8 ou ISO-88591. 27/03/12 73
  • 74. InputStreamReader: lendo chars • InputStreamReader é filha da classe abstrata Reader. Existem diversas filhas, próprias para manipulação de chars. A mais apropriada para leitura de arquivos é a classe FileReader. 27/03/12 74
  • 75. BufferedReader: lendo Strings • Apesar da classe abstrata Reader já ajudar no trabalho com caracteres ainda fica difícil para pegar uma String. É necesário fazer o casting de cada caractere para char e isso pode ser muito custoso. A classe BufferedReader é um Reader que recebe Reader no construtor e concatena os diversos chars para formar uma String através do método readLine: class TestaEntrada { public static void main(String[] args) throws IOException { FileReader reader = new FileReader("arquivo.txt"); BufferedReader bReader = new BufferedReader(reader); String s = bReader.readLine(); } } 27/03/12 75
  • 76. BufferedReader: lendo Strings • Como o próprio nome diz, essa classe lê do Reader por pedaços (também conhecidos como chunk) para evitar realizar muitas chamadas ao file system. Também podemos configurar o tamanho do buffer pelo construtor. • O gráfico abaixo mostra a composição de classes na operação de leitura: 27/03/12 76
  • 77. BufferedReader: lendo Strings • O método readLine devolve a linha que foi lida e muda o cursor para a próxima linha. Caso ele chegue ao fim do Reader (no nosso caso fim do arquivo), ele vai devolver null. Então com um simples laço podemos ler o arquivo por Inteiro: class TestaEntrada { public static void main(String[] args) throws IOException { FileReader reader = new Filereader(“arquivo.txt”); BufferedReader bReader = new BufferedReader(reader); String s = bReader.readLine(); // primeira linha while(s != null) { System.out.println(s); s = bReader.readLine(); } } } 27/03/12 77
  • 78. Lendo Strings do teclado • Exercício: – Dado o gráfico abaixo, criar um mecanismo para leitura de Strings digitado pelo teclado: 27/03/12 78
  • 79. Lendo Strings do teclado • Com um passe de mágica, passamos a ler do teclado em vez de um arquivo, utilizando o System.in que é uma referência a um InputStream que lê da entrada padrão. class TestaEntrada { public static void main(String[] args) throws IOException { InputStream is = System.in; InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String s = br.readLine(); while(s != null) { System.out.println(s); s = br.readLine(); } } } 27/03/12 79
  • 80. A analogia na saída • Como podemos imaginar, o processo de escrita (output) é o processo inverso ao de leitura (input): 27/03/12 80
  • 81. A analogia na saída • Exercício: – Dado o gráfico anterior e o que vimos até agora sobre leitura, fazer um programa para escrita de um arquivo a partir de String lidos do teclado. 27/03/12 81
  • 82. Fechando arquivos • É importantíssimo SEMPRE fechar o arquivo, ou a classe a qual estamos utilizando para facilitar a leitura/escrita. Ao realizar a operação de close, a classe facilitadora sempre fechará o stream do qual ela está lendo. • O método close deve ser invocado de qualquer maneira, por isso é comum que este esteja dentro de um bloco finally. • Se um arquivo for esquecido aberto, e a referência para ele for perdida, ele será fechado pelo garbage collector, que veremos mais a frente, por causa do finalize. Mas não é bom nos prendermos a isso. Se esquecermos de fechar o arquivo no caso de um programa pequeno como os que fizemos até agora, o programa vai terminar antes que o garbage collector atue, resultando em um arquivo não escrito (os bytes ficarão no buffer do BufferedWriter). • Problemas similares podem acontecer com leitores deixados em aberto. 27/03/12 82
  • 83. Uma maneira mais fácil de ler arquivos • No java 1.5 temos a classe java.util.Scanner que facilita bastante o trabalho de ler de um InputStream. Além disso, a classe PrintStream possui agora um construtor que já recebe o nome de um arquivo como argumento. Dessa forma a leitura do teclado com saída para um arquivo ficou muito simples: Scanner s = new Scanner(System.in); PrintStream ps = new PrintStream("arquivo.txt"); while(s.hasNextLine()) { ps.println(s.nextLine()); } • Ambos os métodos não lançam IOException (PrintStream lança FileNotFoundException se construirmos passando uma String, que é filha de IOException e indica que o arquivo não foi encontrado), sendo que o Scanner considerará que chegou ao fim se uma IOException for lançada, e o PrintStream simplesmente engole exceptions desse tipo. Ambos possuem métodos para verificar se algum problema ocorreu. A classe Scanner é do pacote java.util. Ela possui métodos muito úteis para trabalhar com Strings, em especial diversos métodos já preparados para pegar números e palavras já formatadas através de expressões regulares. 27/03/12 83
  • 84. Serialização de Objetos • No contexto de armazenamento e transmissão de dados, a serialização é o processo de salvar um objeto em um meio de armazenamento (como um arquivo de computador ou um buffer de memória) ou transmiti-lo por uma conexão de rede, seja em forma binária ou em formato de texto. Esta série de bytes pode ser usada para recriar um objeto com o mesmo estado interno que o original. • A serialização fornece algumas vantagens, tais como: – Um método simples e robusto de tornar objetos persistentes – Um método para a implementação de chamadas de procedimento remoto – Um método a distribuição de objetos 27/03/12 84
  • 85. Serialização de Objetos • Para que tais funcionalidades sejam usufruídas, deve ser mantida a independência de arquitetura. Por exemplo, um computador com uma arquitetura de hardware diferente deve ser capaz de reconstruir de forma consistente o fluxo de dados seriais. • Em Java, para tornar um objeto Serializável, basta que a classe implemente a interface java.io.Serializable. 27/03/12 85
  • 86. Serialização de Objetos • Tendo um objeto serializável em mãos, podemos tanto persistí-lo em disco, em um banco de dados, ou ainda enviá-lo através de uma rede. • A linguagem Java oferece duas classes que permitem, a partir de um input stream ou um output stream, respectivamente serializar ou desserializar um objeto. 27/03/12 86
  • 87. Serialização de Objetos • A classe ObjectOutputStream permite gravar através de um output stream um objeto serializável: Conta c = new Conta(); // Nossa conta corrente é serializável FileOutputStream output = new FileOutputStream(“arquivo.txt”); ObjectOutputStream objOutput = new ObjectOutputStream(output); objOutput.writeObject(c); // Gravando a conta no arquivo objOutput.flush(); objOutput.close(); 27/03/12 87
  • 88. Serialização de Objetos • E a classe ObjectInputStream permite ler através de um input stream um objeto serializável: FileInputStream input = new FileInputStream(“arquivo.txt”); ObjectInputStream objInput = new ObjectInputStream(input); Object objeto = objInput.ReadObject(); Conta c = (Conta)c; objInput.close(); 27/03/12 88
  • 89. Serialização de Objetos • Exercícios: – Dado o exercício de armazenamento de contas da aula passada, criar um mecanismo para persistir as aulas em um arquivo texto e, sempre ao se inicializar a aplicação, recuperar as contas já criadas. – Personalizar o aplicativo para ler as contas a partir de um arquivo configurado em um arquivo .properties (para manipulação de arquivos de propriedades, ver a classe Properties) 27/03/12 89
  • 90. Aula 4 • JDBC – Arquitetura – Drivers – DriveManager – Fazendo uma consulta no banco • java.sql.Connection • java.sql.Statement • java.sql.ResultSet • java.sql.PreparedStatement – Design Pattern DAO ( Data Access Object ) e VO ( Value Object ) – Características – Arquitetura 27/03/12 90
  • 91. Banco de Dados • Banco de dados Relacionais. – Uma reprodução de uma parte de uma mundo real. – Armazenamento dos dados ficam em Tabelas que são formadas por linhas e colunas. E cada coluna representa um campo e cada linha um registro. – Comprando com Classes Java as Tabelas são as Classes Java, cada Campo da Tabela é um Atributo de uma Classe e cada Registro da Tabela é um Objeto( representa propriamente o Dado). – Utiliza uma linguagem padrão para sua manipulação. Padrão SQL ANSI. Mas cada banco aplica suas variações em cima deste padrão. – Esta linguagem utiliza uma serie de comandos para definição de dados “estruturais” (DDL), tais como criação de Tabelas,Bancos de Dados etc. Ela utiliza outro tipos de comandos (DML) para manipular ( selecionar, inserir, excluir, etc. ) os registros de forma simultânea. – Relacionamento entre entidades. • Tem como objetivo eliminar redundâncias na armazenagem dos dados, evitando assim informações conflitantes. 27/03/12 91
  • 92. Linguagem SQL • Comandos de DDL – Create Database: Criar um novo banco de dados. – Create TABLE: Criar uma nova tabela no banco de dados. – Alter Table: Alterar uma tabela no banco de dados. – Drop Table: Remover uma tabela no banco de dados. – Drop Database: Remover um banco de dados. • Comandos de DML: – SELECT : Selecionar / Manipular os dados armazenados no banco de dados. O produto desta seleção é chamado de “Recordset”. – Insert :Comando dado para inserir dados da tabela – Update: Comando dado para atualizar dados já inseridos na tabela. – Delete: Comando dado para excluir dados contidos na tabela. 27/03/12 92
  • 93. Sintaxe SQL - DML • Select : SELECT <campo1>,<campo2>,..<campoN> FROM <nomeTabela> WHERE <campo1> = and <campo2> = <valor2> • INSERT INSERT INTO <nomeTabela>(<campo1>,<campo2>,..<campoN> VALUES (<valor1> , <valor2>, <valorN> ...) • UPDATE UPDATE <NOME TABELA> SET <CAMPO1 = novoValorCAMPO1 > , <CAMPON = novoValorCAMPON .. > WHERE <CAMPO COND1> = <VALOR COND1> AND <CAMPO CONDN> = <VALOR CONDN> • DELETE DELETE FROM <NOME TABELA> WHERE <CAMPO COND1> = <VALOR COND1> and <CAMPO CONDN> = <VALOR CONDN> 27/03/12 93
  • 94. JDBC • JDBC * – Disponibilizar uma interface de acesso e manipulação de dados para vários bancos de dados (Oracle,My SQL, HSQLDB, Access) – Qual a versão que utilizaremos desta API ? • JDBC 4.0 27/03/12 94
  • 95. JDBC - Arquitetura Aplicação Java Gerenciador de Driver do JDBC JDBC JDBC JDBC Ponte Driver C Driver D Driver de Rede A JDBC-ODBC ODBC Driver C Nativo Driver B Driver B Nativo 27/03/12 95
  • 96. JDBC • Principais Interfaces – Connection – Statement JavaDoc http://java.sun.com/j2se/1.5.0/docs/api – PreparedStatement – CallableStatement – ResultSet – Driver • Principais Classes – DriverManager – Timestamp 27/03/12 96
  • 97. JDBC – Sintaxe de Acesso • A Especificação JDBC define uma sintaxe particular para conectar-se com o banco, ela de um endereço de localização uniforme (URL).Sua sintaxe básica é definida como: jdbc:<nomedodriver>:<subnome> Sendo o subnome os parametros de acesso ao banco, estes parametros variam de Drivers para drivers. Ex: Oracle: jdbc:oracle://[hostname]:[port]/[SID_Oracle] MySQL: jdbc:mysql://[hostname]:[port]/[databesename] DERBY : jdbc:derby://[hostname]:[port]/[databesename] 27/03/12 97
  • 98. Um programa JDBC mínimo • public static void main (String[] args) throws Exception { • • //Class.forName("org.apache.derby.jdbc.ClientDriver"); • Class.forName("com.mysql.jdbc.Driver"); • Connection conn = DriverManager • .getConnection( • "jdbc:mysql://localhost:3306/fastbuy“ • , "fastbuy“ • ,"fastbuy"); • Statement stmt = conn.createStatement(); • ResultSet rset = stmt.executeQuery( • "select * from organizacao"); • while (rset.next()) { • System.out.println("Valor = " + rset.getString(1)); • } • • } 27/03/12 98
  • 99. Um programa JDBC mínimo Registra o Driver Provido pelo Fornecedor Class.forName("com.mysql.jdbc.Driver"); Classe DriverManager retorna um Obj Instanciado da Interface Connection Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/fastbuy","fastbuy","fastbuy”); A Partir de agora estou Conectado no Banco !! Obj. Connection prove o Executor (Statement) de Comandos no Banco. Statement stmt = conn.createStatement(); Posso Enviar uma instrução, comando para o Banco O Executor pode ou não Obter um Conjunto de Dados (ResultSet) do Banco ResultSet rset = stmt.executeQuery("select * from organizacao"); 27/03/12 99
  • 100. JDBC – java.sql • Diagrama de Classes Quem Prove a Classe Concreta ?? Veremos com mais Detalhes as interfaces Connection, Statement, PreparedStatement , ResultSet 27/03/12 100
  • 101. JDBC - Connection • Interface Connection: Representa a Seção do usuário no banco, tem como objetivo prover informações sobre o banco , prover mecanismo para execução de Comandos SQL neste. • Principais Métodos da Interface Connection createStatement : Responsável por retornar uma instância concreta da Interface Statement. prepareStatement : Responsável por retornar uma instância concreta da Interface PreparedStatement prepareCall : Responsável por retornar uma instância concreta da Interface CallableStatement 27/03/12 101
  • 102. JDBC - Statement • Interface Statement: Utilizado pela execução de uma instrução SQL estática e retornar o produto da instrução. • Principais Métodos da Interface Statement execute : Responsável por executar uma instrução SQL que pode retornar um conjunto de resultados. executeQuery : Responsável por executar uma instrução SQL que pode retornar um objeto (ResultSet) de resultado executeUpdate : Responsável por executar uma instrução SQL de atualização (INSERT,UPDATE,DELETE) retornando somente o volume de dados alterados. executeBatch : Responsável por executar um conjunto de instruções (batch) SQL, este medoto deve ser utilizado após a chamada do método addBatch. addBatch : Responsável por adicionar uma uma instrução SQL na fila de comandos para execução futura (executeBatch). 27/03/12 102
  • 103. JDBC - PreparedStatement • Interface PreparedStatement: Utilizado para a execução de uma instrução SQL dinâmica e retornar o produto da instrução, estende a interface Statement Principais Métodos da Interface PreparedStatementBoa Prá tica execute : Responsável por executar uma instrução SQL que pode retornar um conjunto de resultados. executeQuery : Responsável por executar uma instrução SQL que pode retornar um objeto (ResultSet) de resultado executeUpdate : Responsável por executar uma instrução SQL de atualização (INSERT,UPDATE,DELETE) retornando somente o volume de dados alterados. Veremos mais detalhes sobre Statement X PreparedStatement 27/03/12 103
  • 104. JDBC - ResultSet • Interface ResultSet: Utilizado para representar uma coleção (cursor) de dados obtidos do Banco de Dados, gerado por uma instrução executada por um Statement.Ela prove métodos de navegação (iteração) com o conjunto de dadas obtidos e também prove métodos para acesso a cada coluna (atributo) obtida. Principais Métodos da Interface PreparedStatement next : Responsável por mover o cursor para próximo registro e retornando verdadeiro ou falso (true|false). getString, getInt, getDouble, getFloat, getCursor etc.. : São métodos para obtenção do valor contido em cada coluna retornada pelo comando. 27/03/12 104
  • 105. Exercício • Vamos criar uma Classe Chamada de TesteJDBC. Nela implementaremos os métodos realizarão as operações de CRUD (Create, Read, Update, Delete) – Criaremos os Seguintes métodos • executeQuery() • executeInsert() • executeUpDate() • executeDelete() 27/03/12 105
  • 106. Lendo Dados do Banco public static void executeQuery() { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://maquinaintrutor:3306/fastbuy“ , “fastbuy “ , “fastbuy"); System.out.println("Caraca ... maluco to no banco ... "); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select * from organizacao"); while (rset.next()) { System.out.println(“ID Org :" + rset.getInt(“idorg")); System.out.println("Nome :" + rset.getString(“nome")); System.out.println("--"); } } catch (SQLException ex) { } catch (ClassNotFoundException ex) { } } 27/03/12 106
  • 107. Inserindo Dados no Banco public static void executeInsert() { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://maquinaintrutor:3306/fastbuy“ , “fastbuy “ , “fastbuy"); Statement stmt = conn.createStatement(); int i = stmt.executeUpdate("insert into organizacao " + " (nome,cnpj,status,ramoatividade) “ + “ values (‘Eduardo Corp’,‘23333’, ‘aberto’ “ + “ , ‘varejo’ , ‘juridica’ ); } catch (SQLException ex) { } catch (ClassNotFoundException ex) { } } 27/03/12 107
  • 108. Atualizando Dados no Banco public static void executeUpdate () { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://maquinaintrutor:3306/fastbuy“ , “fastbuy “ , “fastbuy"); Statement stmt = conn.createStatement(); int i = stmt.executeUpdate(“update organizacao set " + “ nome = ‘Bisso Corporation’ where cnpj = ‘23333’ “; } catch (SQLException ex) { } catch (ClassNotFoundException ex) { } } 27/03/12 108
  • 109. Excluindo Dados no Banco public static void executeUpdate () { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://maquinaintrutor:3306/fastbuy“ , “fastbuy “ , “fastbuy"); Statement stmt = conn.createStatement(); int i = stmt.executeUpdate(“delete from organizacao where cnpj = ‘23333’ “; } catch (SQLException ex) { } catch (ClassNotFoundException ex) { } } 27/03/12 109
  • 110. Qual a diferença ? • Qual a diferença entre os métodos – executeQuery() – executeInsert() – executeUpDate() – executeDelete() 27/03/12 110
  • 111. JDBC : Como Aplicá-lo e AONDE ? • Divisão da Aplicação por camadas de responsabilidade: Visualização Qual o Pattern Controle Responsável por Gerenciar a Modelo Camada de Persistência ? Camada de Negócio Camada de Integração e Persistência DAO 27/03/12 111
  • 112. JDBC : Como Aplicá-lo e AONDE ? • Aonde aplicá-lo nós vimos, e qual o pattern responsável por isso ? Como e devo criá-lo ? • Para Demonstrar utilização do JDBC nós iniciaremos um projeto novo, que visa atender as necessidades do processo de compra de materiais de escritório de uma grande empresa. 27/03/12 112
  • 113. Projeto FastBuy • Criaremos um conjunto de classes que representarão a lógica de negócio de um sistema de compras de materiais indiretos. • Definiremos as grandes entidades envolvidas, para elas atribuiremos um conjunto de atributo que comporão o modelo de negócio. • Conforme o andamento do projeto serão apresentados os padrões de projeto mais utilizados em cada camada da aplicação. 27/03/12 113
  • 114. Projeto FastBuy • Entidades Envolvidas – Dados Mestres • Materiais • Organização • Usuários – Módulo de Compras • Pedido de Compra 27/03/12 114
  • 115. Projeto FastBuy - VOs 27/03/12 115
  • 116. Projeto FastBuy • Camada de Persistência 27/03/12 116
  • 117. Projeto FastBuy • Construção de Baixo para Cima. – Desenvolver os componentes de infra-estrutura antes de construir os componentes da camada de negócio e apresentação, ou seja inicie sempre pelo DAO/VO. 27/03/12 117
  • 118. Criando o Projeto no NeatBeans • Copiar o Diretório contida na pasta do instrutor chamada FastBuyERP. - Sub Diretórios - src - Código Fonte. - lib - Bibliotecas - model – diagramas - Crie um projeto baseado em um código que já exista. 27/03/12 118
  • 119. Projeto FastBuy • Vamos Olhar a implementação da Classe EnderecoDAO, que se encontra no package: br.com.season.fastbuyerp.persistencia • Vamos verificar o metodo getEndereco (String login) • Vamos aplicar a escada de acessos ... !!! 27/03/12 119
  • 120. Projeto FastBuy • Atividade em Grupo: – Vamos criar o método: public EnderecoVO getEndereco(long idEndereco) • Atividade em CASA : – Implementar o DAO de PedidoCompra utilizem os DAOs implementados como base. 27/03/12 120
  • 121. Aula 6 • Interface Gráfica – Arquitetura – Diferenças entre AWT / Swing – Componentes e Eventos – Fazendo nossa primeira tela • MVC – Arquitetura e classe da aplicação com banco de dados – Fazendo uma aplicação de cadastro com JDBC – Construção da tela de cadastro – Reutilizando a tela de cadastro para Atualização – Monstrando mensagens para o usuário com JOptionPanel 27/03/12 121
  • 122. Camada UI – Swing O que é ? Com o Java 1.2 ele se tornou o novo toolkit gráfico substituindo os componentes visuais do AWT e acrescentando muitas novas funcionalidades. Os componentes visuais são escritos inteiramente em Java, o que garante recursos e comportamento independente da plataforma. Isso a torna também “diferente” das aplicações nativas, no seu visual e comportamento. Apesar do recurso de look-and-feels personalizados (Basicamente uma capacidade de temas para o Swing), e o mesmo com as melhorias nas ultimas versões do Java, ainda é possivel perceber claramente quando uma aplicação e puro-Java ou quando ela usa um toolkit nativo (Dephi, VB) no Windows, ou no Gnome e KDE no Linux (Isso não é necessariamente uma desvantagem). O Swing também implementa muitos design patters orientados a objetos, o que o torna o toolkit gráfico mais flexível, extensível e poderoso do mercado, porém este recurso traz um custo significativo em performance e Curva de Aprendizado. 27/03/12 122
  • 123. Swing no Java 1.6 27/03/12 123
  • 124. Swing - Arquitetura Note que o Swing e o AWT Componentes duplicam parte da funcionalidade MVC gráfica básica fornecida pela plataforma nativa (anti-aliasing de textos, efeitos com janelas e Swing vários outros recursos ), que o Componentes Sofisticados torna mais difícil das aplicações Java se beneficiarem de hardware gráfico acelerado e outras otimizações do sistema operacional. Isso contribui em Primitivas Gráficas parte para a percepção de e Componentes “lentidão” de aplicações Swing AWT Simples otimizadas. Acesso ao Sistema Gráfico do SO Hardwarde 27/03/12 124
  • 125. Swing - Pacotes javax.swing - Provides a set of "lightweight" (written in Java with no native code) components that, to the maximum degree possible, work the same on all platforms. javax.swing.colorchooser - Contains classes and interfaces used by the JColorChooser component. javax.swing.event - Provides support for events fired by Swing components. javax.swing.filechooser - Contains classes and interfaces used by the JFileChooser component. javax.swing.plaf - Provides one interface and many abstract classes that Swing uses to provide its pluggable look and feel capabilities. all painting is delegated. javax.swing.table - Provides classes and interfaces for dealing with JTable. javax.swing.text - Provides classes and interfaces that deal with editable and non-editable text components. javax.swing.text.rtf - Provides a class (RTFEditorKit) for creating Rich Text Format text editors. javax.swing.tree - Provides classes and interfaces for dealing with JTree. javax.swing.undo - Allows developers to provide support for undo/redo in applications such as text editors. 27/03/12 125
  • 126. Swing - Componentes • JLabel • JButton • JTextField • JRadioButton • JCheckBox • JComboBox • JList • JProgressBar • JTabbedPane • JTree • JTable • JMenuBar • JToolBar 27/03/12 126
  • 127. Swing – 1º Componentes • Nosso Primeiro Componente – Vamos Criar a classe Main no pacote : • br.com.fastbuy.view.gui Vamos criar nosso primeiro componente Swing. 1. Acesse o menu New File do NeatBeans. 2. Selecione a opção Java Gui Form e JFrame Form 27/03/12 127
  • 128. Swing – 1º Componente Componentes Utilizados -JFrame (Container) -JPanel -JLabel -JTextField -JToolBar -JButton -JScrollBar -JTable -JComboBox -JSeparator 27/03/12 128
  • 129. Swing – 1º Componente • Boas Praticas – Alterar nome dos Componentes para nomes compreensíveis, ou seja , não utilize JTextField1, textA , etc ... Utilize o nome do atributo que ele representa. Por Exemplo um JTextField que conterá o atributo ‘nome” defina o nome do componente como nomeTxt ou txtNome. 27/03/12 129
  • 130. Swing – 1º Componente Componentes Utilizados -JFrame (Container) -JPanel -JLabel -JTextField -JToolBar -JButton -JScrollBar -JTable -JComboBox 27/03/12 130
  • 131. Swing – 1º Componente Componentes Utilizados -JFrame (Container) -JPanel -JLabel -JTextField -JToolBar -JButton -JScrollBar -JTable -JComboBox 27/03/12 131
  • 132. Swing Customizando Componentes • Os componentes Swing são Segregados em três camadas ( Model, View, Controler) , quando adicionamos um JButton no nosso formulário, na verdade estamos adicionando um controlador, que gerencia a camada de Apresentação e Modelo deste Componente. • Os componente Swing JButton , JLabel , JList , JTable são controladores que gerenciam os Componentes de "PLAF“ (Pluggable Look-And-Feel) como por ex : javax.swing.plaf.ButtonUI e também os componentes de Modelo que são os responsáveis pelo comportamento do componente Button. Este tipo de arquitetura é o diferencial das Aplicações Swing comparado com outros framework GUI de mercado (Delphi , Visual Basic). • Isso proporciona maior escalabilidade referente a Look and Feel e customização do comportamento de cada componente, ou seja, ganho de capacidade de aplicar Skins a minha apresentação sem afetar o comportamento do componente. 27/03/12 132
  • 133. Swing Customizando Componentes • Também posso alterar o comportamento dos componentes existentes. Por exemplo: Por Default um JTable não é capaz de identificar se uma determinada célula (LinhaXColuna) deverá ter a cor da Fonte Vermelha ou Exibir uma Imagem baseado no conteúdo ou ainda exibir uma ComboBox com uma lista de valores possíveis para aquela célula. Então vamos observar como é a relação do Componente JTable (Controle) com outras classes e interfaces. 27/03/12 133
  • 134. Swing – Trabalhando com Eventos 27/03/12 134