Baixe o app para aproveitar ainda mais
Prévia do material em texto
2021.1 PROGRAMAÇÃO II CCT0695 PROFESSOR: HENRIQUE TAVARES 1 2021.1 CONTEÚDO 2 ➢ MODELAGEM COMPORTAMENTAL o Elementos Genéricos o Anotações e Reflexividade Computacional o Java Collection Framework (Coleções) o Representação de entidades e relacionamentos com uso de coleções ➢ BANCO DE DADOS o Manipulação de exeções o Middleware o Consulta e manipulação de dados com JDBC o Padrão DAO o Sistema de Banco de Dados na arquitetura MVC 2021.1 3 ➢ INTERFACES GRÁFICAS o Bibliotecas AWT e SWING o Criação de janelas por composição o Manipulação de eventos o Biblioteca SWT o Biblioteca JavaFX o Arquitetura MVC no JavaFX ➢ PARALELISMO E REDE o Criação e controle de tarefas em paralelo o Criação de servidor e cliente de rede via Socket o Comunicação assíncrona com Socket e Thread o Sistema MVC com uso de Socket o Clientes gráficos para ambiente Socket-MVC CONTEÚDO 2021.1 METODOLOGIA DE AVALIAÇÃO 4 AVALIAÇÃO O processo de avaliação oficial será composto de três etapas, Avaliação 1 (AV1), Avaliação 2 (AV2) e Avaliação 3 (AV3), sendo AV2 e AV3 unificadas, a partir de um banco de questões propostas pelos professores da Estácio de todo o Brasil. As avaliações poderão ser realizadas através de provas teóricas, provas práticas, e realização de projetos ou outros trabalhos, representando atividades que possam vir a compor o grau final de cada avaliação não poderá ultrapassar o grau máximo de 10, sendo permitido atribuir valor decimal às avaliações. Caso a disciplina, atendendo o projeto pedagógico de cada curso, além de provas teóricas e/ou práticas contemple outras atividades acadêmicas de ensino, estas não poderão ultrapassar 20% da composição do grau final. 2021.1 5 AVALIAÇÃO A avaliação AV1 contemplará o conteúdo da disciplina até a sua realização. As avaliações AV2 e AV3 abrangerão todo o conteúdo da disciplina. Para aprovação na disciplina, o aluno deverá: 1. Atingir resultado igual ou superior a 6,0, calculado a partir da média aritmética entre os graus das avaliações, sendo consideradas apenas as duas maiores notas obtidas dentre as três etapas de avaliação (AV1, AV2 e AV3). A média aritmética obtida será o grau final do aluno na disciplina; 2. Obter grau ou superior a 4,0 em, pelo menos, duas das três avaliações; 3. Frequêntar, no mínimo 75% das aulas ministradas. METODOLOGIA DE AVALIAÇÃO 2021.1 CARACTERÍSTICAS DO JAVA 6 2021.1 JDK - O que é JDK ? - Java Development Kit - É um produto da Sun direcionado a desenvolvedores Java; - Seus principais componentes são: • javac: O compilador, que converte código fonte em bytecodes Java. • jar: O empacotador que empacota as classes em um arquivo JAR. • javadoc: O gerador de documentação, que gera documentação automaticamente a partir de comentários no código. • jdb: O debugador. 2021.1 JDK O JDK tem também uma JRE (Java Runtime Environment) completa: • Máquina Virtual Java • Bibliotecas de classes apresentadas no ambiente de produção e algumas bibliotecas que são úteis 2021.1 JDK - Instalação - Download do JDK: https://www.oracle.com/technetwork/pt/java/javase/downloads/index.html https://www.oracle.com/technetwork/pt/java/javase/downloads/index.html 2021.1 Programas em Java - Extensão .java • Para compilar: javac Classe.java • Para executar: java Classe • Execução a partir de um arquivo JAR: java -jar nomeDoPacote.jar O programa java cria apenas objeto inicial e a primeira mensagem. 2021.1 Documentação Oficial Java - Documentação Oficial: https://www.oracle.com/java/technologies/javase-documentation.html https://www.oracle.com/java/technologies/javase-documentation.html 2021.1 Programas Java com uso do NetBeans - CRIAÇÃO DO PROJETO: ARQUIVO > NOVO PROJETO > Java (APLICAÇÃO JAVA) > PRÓXIMO 1. ESCREVE O NOME DO PROJETO 2. ESCOLHE O LOCAL A SER GRAVADO O PROJETO 3. FINALIZA. - CRIAÇÃO DE CLASSES: ARQUIVO > NOVO ARQUIVO > JAVA > CLASSE JAVA > PRÓXIMO > NOME DA CLASSE > FINALIZA. 2021.1 Programas Java com uso do NetBeans public class Programa01 { public static void main(String[ ] args) { int A = 6; int B = 8; System.out.println("\tSoma do conteudo das variaveis A e B = "+(A+B)); System.out.println("\n\tPrimeiro programa em Java\n\n"); } } 2021.1 INTRODUÇÃO 14 2021.1 Programação Procedural Organização modular não respeita a similaridade das informações. Tem por objetivo identificar procedimentos que realizarão algum tipo de processamento que mistura dados com diferentes semânticas. 2021.1 Clientes Funcionários Vendas Itens das Vendas Parcelas da Vendas Condições de Pagamento Programação Procedural 2021.1 Programação OO Informações organizadas em classes São identificadas as entidades e seus relacionamentos para compor um sistema. A computação flui por meio de um mar de mensagens trocadas entre os objetos. 2021.1 Programação OO Itens da Venda Parcelas da Venda Condições de Pagamento Cliente Troca de Mensagens Funcionário Venda 2021.1 Classes Classes são utilizadas para caracterizar e descrever cenários: trata-se do uso de semântica! Na linguagem de programação Java, programas são construídos a partir de classes. A partir de uma definição de classe, você pode criar qualquer quantidade de objetos. 2021.1 Classes Na classe são definidos os membros do objeto: seus atributos (dados) e métodos (comportamentos) 2021.1 Pacotes (I) As classes são "arrumadas" dentro de pacotes. 2021.1 Pacotes (II) Pacotes são unidades de agrupamento de classes. Classes são agrupadas por vários motivos: Organização Performance da aplicação Solução de escopos de variáveis Os pacotes podem ter sub-pacotes de qualquer profundidade. Para evitar conflitos de nomes: O nome do pacote deve ser único para classes e interfaces no pacote. Escolher um nome que seja ao mesmo tempo significativo e único. 2021.1 Especialização É a criação de subclasses a partir de superclasses. As subclasses herdam de sua classe mãe: Estrutura Comportamento Relacionamentos Algumas destas características podem ser redefinidas, caracterizando uma especialização com relação à classe mãe. Características adicionais podem ser definidas. 2021.1 Generalização É a criação de superclasses a partir de suas subclasses. As características comuns entre as subclasses são colocadas na superclasse. Procedimento para criação de superclasse: Observar a estrutura e comportamento comuns entre as subclasses. Incorporar estas características à superclasse. As classes originais passam a ser subclasses da nova superclasse. 2021.1 Exemplos de Classes Um cenário de uma agência bancária pode ser caracterizado com as seguintes classes: ⚫ PessoaFisica ⚫ PessoaJuridica ⚫ ContaCorrente ⚫ ContaPoupanca ⚫ TituloDeCapitalizacao ⚫ FundoInvestimento ⚫ DOC ⚫ EscriturarioCaixa ⚫ GerenteOperacional ⚫ GerenteDeRelacionamento ⚫ CaixaEletronico ⚫ Deposito ⚫ Saque etc. 2021.1 Similaridade dos Significados Quais classes podem ser reunidas de acordo com a proximidade dos seus significados? Conta ContaCorrente ContaPoupanca Cliente PessoaFisica PessoaJuridica Investimento TituloDeCapitalizacao FundoInvestimento OperacaoBancaria OperacaoOutroBanco DOC OperacaoMesmoBanco Deposito Saque Funcionario EscriturarioCaixa GerenteOperacional GereteDeRelacionamento 2021.1 Herança: a hierarquia dos Significados • Java usa herançapara reutilizar classes existentes • Herança estabelece uma relação de similaridade entre essas classes. • Exemplo: ContaPoupanca é uma Conta PessoaFisica é um Cliente TituloDeCapitaliacao é um Investimento Em Java: class ContaPoupanca extends Conta {} 2021.1 java.lang.Object É a raiz da hierarquia de classes da API do Java Toda classe estende Object, direta ou indiretamente Classes que não declaram estender ninguém, estendem Object diretamente. 2021.1 java.lang.Object Classes que declaram estender outra classe, herdam de Object pela outra classe com a hierarquiaque começa em Object. Todos os métodos de Object estão automaticamente disponíveis para qualquer objeto Porém, as implementações são default, e geralmente inúteis para objetos específicos. 2021.1 Exercicio 1 Usando herança e aplicando generalização, crie o código Java que exibe a relação de similaridade entre as classes: EscriturarioCaixa, GerenteOperacional, GerenteDeRelacionamento, CaixaEletronico, Deposito, Saque, PessoaFisica, PessoaJuridica, ContaCorrente, ContaPoupanca, TituloDeCapitalizacao, FundoInvestimento e DOC. 2021.1 Objetos Um objeto é uma entidade que engloba dados e os métodos necessários à sua manipulação. Objetos são unidades autocontidas que executam tarefas personalizadas: trata-se de estruturas semanticamente autosuficientes. 2021.1 Objetos – construção Objetos sao criados à imagem da sua classe geradora. 2021.1 Objetos – destruição Após sua utilização, objetos podem ser destruídos. 2021.1 Objetos Pense em uma classe como uma fábrica com esquemas e instruções para construir artefatos: objetos são os artefatos que a fábrica produz. Para construirmos um objeto a partir da classe ContaCorrente: ContaCorrente minhaConta = new ContaCorrente(); 2021.1 Construtores de Objetos Construtores são procedimentos realizados na construção de objetos e devem possuir o mesmo nome da classe em questão. Podemos garantir que um objeto seja construído de varias formas diferentes, por exemplo: Conta minhaConta = new Conta(); OU AINDA… Conta minhaConta = new Conta(“Flavia”); OU AINDA… Conta minhaConta = new Conta(“Flavia”, 2000); 2021.1 Encapsulamento Algumas informações não devem ser construídas dentro de certos objetos pois entram em discordância com o significado da classe de objetos. Torna-se necessário isolar tais informações em outros objetos o que torna a programação mais coerente. Exemplo: Cliente umCliente = new Cliente(“Flavia”); LOGO DEPOIS… Conta minhaConta = new Conta( umCliente , 2000); 2021.1 Encapsulamento • Sendo assim, encapsulamento é uma forma de isolamento de dados (atributos) e comportamento (métodos) dos objetos das classes. • Classes Java encapsulam atributos e métodos da seguinte forma: class Conta { float saldo; void creditar( float valor ) { } void debitar( float valor ) { } void encerrar( ) { } } class Cliente { String nome; String endereco; char sexo; void enviarMalaDireta( ) { } void realizarCobranca( ) { } } 2021.1 Habilitando Construtores de Objetos Construtores de objetos devem ser disponibilizados na classe de onde serão criados os objetos: class Conta { float saldo; Cliente titular; void creditar( float valor ) { } void debitar( float valor ) { } void encerrar( ) { } Conta ( ) { } Conta ( Cliente cliente, double valor ) { } } 2021.1 Variáveis Variáveis são usadas em linguagens em geral para armazenar valores. Valores são passados para variáveis através de operações de atribuição Atribuição de valores Atribuição de referências (variáveis de objeto) numero = 44; letra = ‘C’; flag = false; frase = “Saldo insuficiente!” ; umCliente = new Cliente(); umaConta = new Conta(); 2021.1 Declaração de variáveis A declaração de uma variável é realizada quando citamos o seu tipo: int numero; char letra; boolean flag; String frase; Cliente umCliente; Conta umaConta; 2021.1 Declaração com Atribuição Frequentemente, ao declararmos uma variável podemos logo atribuir um valor que a inicializa. int numero = 44; char letra = ‘C’; boolean flag = false; String frase = “Saldo insuficiente!” ; Cliente umCliente = new Cliente(); Conta umaConta = new Conta(); 2021.1 Tipos primitivos Sao atômicos, por isso nao podem ser quebrados em pedaços menores. int numero = 44; char letra = ‘C’; boolean flag = false; 2021.1 Tipos primitivos 2021.1 Tipos Complexos Tipos complexos são compostos por outros tipos: Date data = new Date(2008, 2, 18); int[] vetorInteiros = {1, 4, 7, 9}; OU AINDA… String frase = “Saldo insuficiente!” ; Cliente umCliente = new Cliente(“Flavia”); Conta minhaConta = new Conta( umCliente , 2000); 2021.1 Declarando Variáveis, Atributos e Parâmetros na classe • Variaveis sao declaradas no corpo dos metodos • Parametros sao declarados no cabecalho dos metodos • Atributos sao declarados no corpo da classe class Conta { double saldo; Cliente titular; boolean ativa; void encerrar( ) { } void creditar( double valor ) { } void debitar( double valor ) { double debito = valor; saldo = saldo – debito; } Conta( ) { ativa = true; } Conta(Cliente cliente, double valor ) { ativa = true; saldo = valor; titular = cliente; } } 2021.1 Exercicio 2 Termine a programação da classe Conta completando os métodos void encerrar() e void creditar(double valor) 2021.1 Exercício 3 Pergunta: de que forma podemos consultar o nome do titular de uma conta quando construimos objetos assim: Cliente umCliente = new Cliente(“Flavia”); LOGO DEPOIS… Conta minhaConta = new Conta( umCliente , 2000); 2021.1 MODELO COMPORTAMENTAL 48 2021.1 Programação Procedural Programação procedural (ou programação procedimental) • sinônimo de Programação Imperativa (Paradigma de programação baseado em ordens/comandos) • pode se referir a um paradigma de programação baseado em chamadas a procedimento (en: procedure call). • Os Procedimentos, também são conhecidos como rotinas e sub-rotinas, com passos computacionais a serem executados e reutilizados várias vezes, podendo ser reconfigurados. 2021.1 Programação OO • Informações organizadas em Classes • São identificadas as entidades e seus relacionamentos para compor um sistema. • A computaçãoflui por meio de um mar de mensagens trocadas entre os objetos. 2021.1 Anotações • Introduzidas no Java 5 • São “decoradores” aplicados no nível das Classe e das Variáveis que definem os descritores relacionados à própria Classe. • A partir do Java 5 as anotações tiveram um papel determinante na contrução de aplicativos com acesso aos Bancos de Dados através do uso de JPA (Java Persistence API) • JPA permite a realização de mapeamentos entre tabelas de bancos de dados relacionais e programas orientados a objetos ORM (object-relational mapping) 2021.1 Anotações e ORM 2021.1 Anotações e ORM 2021.1 Anotações Classe persistente simples, Employee, definida sem anotações public class Employee { private int id = 0; private String nome = null; … } Classe persistente simples, Employee, definida com anotações @Entity public class Employee { private int id = 0; private String nome = null; … } • As anotações são concisas e permitem verificações imediatas de tipos na compilação. • Elas são decorações que viabilizam a administração eficiente dos metadados 2021.1 Identificador @Entity public class Employee { @Id private int id = 0; private String nome = null; //O Hibernate utiliza o método para acessar o campo. public int getId( ) { return id; } ... } Todas as entidades persistentes devem ter seus identificadores definidos; do contrário, o Hibernate irá reclamar. Desse modo, usamos a anotação @Id para indicar o identificador do objeto ao framework. Em nossa classe Employee, a chave primária é declarada como uma variável id, portanto decoramos id com a anotação relevante: 2021.1 Identificador ID @Entity public class Employee { @Id @Column(name=”EMPLOYEE_ID”) private int id = 0; private String nome = null; public int getId( ) { return id; } ... } Quando usamos a anotação @Id na variável id, como no exemplo anterior, o Hibernate mapeia um campo chamado ID de nossa tabela Employee à variável id da classe Employee. Outro aspecto a ser observado: A maioria dos bancos de dados não nos permitirá criar um campo chamado ID, pois ela é uma palavra-chave reservada. Em circunstâncias como essa, normalmente alteramos o nome do campo – por exemplo, EMPLOYEE_ID no caso da tabela Employee anterior. Como o campodo objeto e o nome da coluna não são iguais, devemos definir o nome da coluna explicitamente usando uma anotação @Column adicional. 2021.1 Identificador ID @Entity public class Employee { @Id @Column(name=”EMPLOYEE_ID”) private int id = 0; private String nome = null; public int getId( ) { return id; } ... } Quando usamos a anotação @Id na variável id, como no exemplo anterior, o Hibernate mapeia um campo chamado ID de nossa tabela Employee à variável id da classe Employee. Outro aspecto a ser observado: A maioria dos bancos de dados não nos permitirá criar um campo chamado ID, pois ela é uma palavra-chave reservada. Em circunstÇancias como essa, normalmente alteramos o nome do campo – por exemplo, EMPLOYEE_ID no caso da tabela Employee anterior. Como o campo do objeto e o nome da coluna não são iguais, devemos definir o nome da coluna explicitamente usando uma anotação @Column adcional. 2021.1 Reflexidade Computacional Em ciência da computação, reflexão computacional (ou somente reflexão) é a capacidade de um programa observar ou até mesmo modificar sua estrutura ou comportamento. Tipicamente, o termo se refere à reflexão dinâmica (em tempo de execução), embora muitas linguagens suportem reflexão estática (em tempo de compilação). O Reflection, em poucas palavras, serve para determinar métodos e atributos que serão utilizados de determinada classe (que você nem conhece) em tempo de execução. Há inúmeras utilidades para esse tipo de tarefa, podemos citar por exemplo a instalação de plugins adicionais ao nosso software desenvolvido. 2021.1 O que é Reflexão? • Em Java, a reflexão é mais introspecção, porque você não pode alterar a estrutura de um objeto. • A reflexão é comumente usada por programas que exigem a capacidade de examinar ou modificar em tempo de execução o comportamento de aplicativos em execução na máquina virtual Java. 2021.1 Quando deve ser utilizada? Reflexão permite-nos: • Examinar a classe de um objeto em tempo de execução; • Construir um objeto para uma classe em tempo de execução; • Examinar campo e método de uma classe em tempo de execução; • Invocar qualquer método de um objeto em tempo de execução; • Alterar a acessibilidade do construtor, método e campo; etc. 2021.1 Quando deve ser utilizada? 1. Recursos de extensibilidade Um aplicativo pode fazer uso de classes externas, que necessitam “aprimoramento”. 2. Depuradores e ferramentas de teste Depuradores precisa ser capaz de examinar as partes privadas de uma classes. Ferramentas de teste podem fazer uso de reflexão para chamar sistematicamente um conjunto de APIs definidos em uma classe, para garantir um alto nível de cobertura de código em um conjunto de testes. 3. Metaprogramação Soluções para desenvolvimento de software; Refatoração. 2021.1 Como utilizar? Exemplos Exemplo 1: Receber o nome da classe de um objeto; Exemplo 2: Invocar o método de um objeto desconhecido; Exemplo 3: Criar objetos de uma instância de Classe; Exemplo 4: Obter construtor e criar instância; Exemplo 5: Alterar o tamanho de um Array através da reflexão; Exemplo 6: Acessar atributos privados. 2021.1 Reflexidade Computacional Class<ClassDesconhecida> classe = ClassDesconhecida.class; for (Field atributo : classe.getDeclaredFields()) { System.out.println(atributo.getName()); } Perceba no código acima que não sabemos quais os métodos e atributos da “ClassDesconhecida”, para isso vamos utilizar as ferramentas oferecidas pelo Reflection afim de descobrir essas informações em tempo de execução. Veja que através do método “DeclaredFields” conseguimos capturar todos os atributos da classe em questão, mesmo sem saber como ela foi construída. 2021.1 Reflexidade Computacional Riscos do Java Reflection Deve-se usar este recurso com muito cuidado, sempre atentando aos possíveis riscos que podem ser causados pelo uso indevido do mesmo: • Redução de Desempenho, pois se o código que esta sendo executado for requerido com muita frequência, consequentemente acarretará em uma redução de desempenho. • Problemas por restrição de segurança, especialmente se executado em um ambiente com regras específicas • Exposição de estrutura interna dos objetos, pois utilizando este recurso temos acesso a todos os métodos e atributos de determinado objeto, isso pode ser um problema em se tratando de segurança. 2021.1 Reflexidade Computacional Benefícios do Java Reflection Além dos riscos temos também os benefícios que podem ser aproveitados se usarmos o Java Reflection da forma correta e adequada. - Facilidade na manutenção - Minimização de Erros - Ganho de Produtividade - Padronização - Extensibilidade 2021.1 Reflexidade em java - exemplo package model; public class Cliente { private Integer matricula; private String nome; public Cliente(Integer matricula, String nome) { // MÉTODO CONSTRUTOR COM PARÂMETROS super(); this.matricula = matricula; this.nome = nome; } public Cliente() {//MÉTODO CONSTRUTOR SEM PARÂMETROS super(); } public Integer getMatricula() { // MÉTODOS GETTERS e SETTERS return matricula; } public void setMatricula(Integer matricula) { this.matricula = matricula; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } 2021.1 Reflexidade em java - exemplo package model; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class RefleccaoMapCliente { public static Map<String, Object> getAttributesMap(Object obj) { Map<String, Object> attributesMap = new HashMap<String, Object>(); Class<?> objClass = obj.getClass(); Method[] methods = objClass.getMethods(); for(Method method : methods) { if(method.getName().startsWith("get") && method.getReturnType() != void.class) { String attributeName = getAttributeName(method.getName()); try { Object value = method.invoke(obj); attributesMap.put(attributeName, value); } catch (Exception e) { e.printStackTrace(); } } } return attributesMap; } private static String getAttributeName(String name) { return name.substring(2); } } 2021.1 Reflexidade em java - exemplo package control; import java.util.Map; import model.Cliente; import model.RefleccaoMap; public class Principal { public static void main(String args[]){ Cliente cli = new Cliente(); Class<Cliente> classe = Cliente.class; // cli.setMatricula(1); //ATRIBUI VALOR PARA O ATRIBUTO MATRICULA // cli.setNome(“Henrique Tavares"); //ATRIBUI VALOR PARA O ATRIBUTO NOME Map<String, Object> attributes = RefleccaoMap.getAttributesMap(cli); System.out.println("REFLEXIDADE EM JAVA"); System.out.println("PROFESSOR: HENRIQUE TAVARES"); for(String key : attributes.keySet()) { System.out.println(key + ": " + attributes.get(key)); } } } 2021.1 Material Extra Livro: Java Reflection in Action (In Action series) - Ira R. Forman, Nate Forman Tutoriais: • http://tutorials.jenkov.com/java-reflection/index.html • https://www.javacodegeeks.com/2014/11/java-reflection-api-tutorial.html 2021.1 Exercícios 1 – Qual o conceito de anotações em uma classe java? 2 – O que as anotações definem em uma classe java? 3 – O as anotações representam em uma classe java? 4 – Defina em java a classe persistente simples Funcionario sem anotação, composta com os atributos descritos abaixo. id: inteiro, nome: String, logradouro : String, bairro: String, cidade: String, uf: String, salario: Double. 5 – Defina em java a classe persistente simples Funcionario com anotação, composta com os atributos descritos abaixo. id: inteiro, nome: String, logradouro : String, bairro: String, cidade: String, uf: String, salario: Double. 6 – Para que serve o uso da anotação @Id em uma classe java? 7 – Defina em java a classe persistente simples Funcionario com anotação e um identificador, composta com os atributos descritos abaixo. id: inteiro, nome: String, logradouro : String, bairro: String, cidade: String, uf: String, salario: Double. 2021.1 8 – Em uma classe java para queserve a anotação @Column? (pesquisar) 9 – Para que serve o Reflection em uma classe java? 10 – Quais os riscos do Java Reflection? 11 – Quais os benefícios do Java Reflection? 12 – Codifique um sistema que: a) realize o processo de reflexidade para a classe Cliente com os seguintes atributos: Matricula, Nome, Bairro e Cidade; b) atribua via programa valores para os atributos da classe. c) exiba na tela o valor dos atributos com seus respectivos conteúdos. 13 – Codifique um sistema que: a) realize o processo de reflexidade para a classe Cliente com os seguintes atributos: Matricula, Nome, Bairro e Cidade; b) atribua via teclado valores para os atributos da classe, com uso da classe JOptionPane. c) exiba na tela o valor dos atributos com seus respectivos conteúdos. Exercícios 2021.1 MODELO COMPORTAMENTAL 72 2021.1 Coleção: estrutura de dados Vários objetos Objeto de agregação A fundação do framework de coleções do Java Declaração de uma coleção Collection<String> colecao = new ArrayList(); Java Collection Framework (Coleções) 2021.1 API Collections • Interfaces Manipulação independente dos detalhes da sua representação. Interfaces Collection Implementações Algoritmos Java Collection Framework (Coleções) 2021.1 API Collections - Collection raiz da hierarquia de coleções interface base para todas as coleções manipular coleções com máxima generalidade Define operações como: Java Collection Framework (Coleções) • adição (add), • remoção (remove); • esvaziamento (clear); • tamanho (size); • conversão para array (toArray); • iterador (iterator); • verificações de existência (contains e isEmpty). 2021.1 Há ainda classes que implementam a interface Map ao invés da Collection, mesmo assim, faz parte da API Collection. API Collections - Implementações concretas das coleções estruturas de dados reutilizáveis.são Java Collection Framework (Coleções) 2021.1 API Collections - Algoritmos Métodos (Busca e Ordenação) Implementar Interfaces das coleções • Algoritmo shuffle • Os algoritmos reverse, fill, copy, max, min • Algoritmo binarySearch • Algoritmos addAll, frequency, disjoint Java Collection Framework (Coleções) 2021.1 Set <<interface>> Set HashSet LinkedHashSet TreeSet <<interface>> SortedSet <<interface>> Collection • Pesquisa de dados + rápida do que obj tipo List • inserção de dados é mais lenta • Não precisa especificar a posição para adicionar um elemento • conjuntos que pode ser implementado como instâncias das classes: HashSet ou TreeSet; • Não aceita valores duplicados • Os elementos não são ordenados, nem se mantém na ordem em que foram inseridos Set<String> colecaoSet = new HashSet <String>(); colecaoSet.add(“Pelé"); colecaoSet.add(“Maradona"); colecaoSet.add(“Zico"); Sintaxe Java Collection Framework (Coleções) 2021.1 Set - Exemplo package control; import java.util.HashSet; import java.util.Set; public class TestandoSet { public static void main(String[] args) { Set<String> colecaoSet = new HashSet<String>(); colecaoSet.add(“Pele"); colecaoSet.add(“Zico"); colecaoSet.add(“Maradona"); //dados duplicados não são inseridos no Set colecaoSet.add(“Zico"); colecaoSet.add(“Pele"); System.out.println("Tamanho coleção Set: "+colecaoSet.size()); int count = 0; for(String valor : colecaoSet){ System.out.println(++count + " -> " + valor); } } } Java Collection Framework (Coleções) 2021.1 List <<interface>> List ArrayList Vector LinkedList <<interface>> Collection Ordenada (sequência) Elementos duplicados Índice numérico É como um array de tamanho variável Métodos de inserção e remoção Collection<String> nomes = new ArrayList(); nomes.add(“Maradona"); nomes.add(“Pele"); nomes.add(“Zico"); nomes.add(“Pele"); nomes.add(“Zico"); Sintaxe Java Collection Framework (Coleções) 2021.1 List - Exemplo package package model; import java.util.Collection; import java.util.ArrayList; public class ColectionList { public static void main(String[] args) { Collection<String> nomes = new ArrayList(); nomes.add(“Zico"); nomes.add(“Pele"); nomes.add(“Maradona"); nomes.add(“Pele"); nomes.add(“Maradona"); System.out.println("Lista de nomes: "+nomes); } } Java Collection Framework (Coleções) 2021.1 Queue (Fila) <<interface>> Queue PriorityQueueLinkedList <<interface>> Collection Operações: (Além das herdadas de Collection) • inserção (offer); • remoção (remove, pool); • inspeção (peek: para retornar o <head> da fila). ...forma de visualizar uma List, acesso às operações de “enfileirar” e “desenfileirar” alguma coisa. Java Collection Framework (Coleções) 2021.1 Queue (Fila) - Exemplo package model; import java.util.LinkedList; import java.util.Queue; public class QueueL { public static void main(String[] args) { Queue<String> objQueue = new LinkedList<>(); // ADICIONANDO ELEMENTOS NA LISTA objQueue.add(“PELE"); objQueue.add(“ZICO"); objQueue.add(“MARADONA"); System.out.println("ELEMENTOS DA LISTA " + objQueue); System.out.println("Exibindo o Elemento frontal = " + objQueue.peek()); System.out.println("REMOVENDO o Elemento frontal"); String nome = objQueue.remove(); //REMOVE O PRIMEIRO ELEMENTO DA LISTA } } Java Collection Framework (Coleções) 2021.1 Map Não pode conter chaves duplicadas (= Set) Os valores podem ser repetidos para chaves diferentes. Cada chave mapeia para no máximo um valor. não possui uma ordem definida para percorrimento. Map<E> mapa = new Type(); Onde: E - é o objeto declarado, podendo ser classes Wrappers ou tipo de coleção. Type - é o tipo de objeto da coleção a ser usado. Sintaxe Java Collection Framework (Coleções) 2021.1 Ordenação de Objetos (I) ELEMENTOS (tipo) ORDEM String alfabética Date cronológica ArrayList<String> obj = new ArrayList<String>(); obj.add(“PELE"); obj.add(“ZICO"); obj.add(“MARADONA"); obj.add(“RONALDO FENÔMENO"); obj.add(“ROBERTO CARLOS"); Sintaxe Collections.sort(obj); ordem crescente Collections.sort(obj, Collections.reverseOrder()); ordem decrescente Java Collection Framework (Coleções) 2021.1 Ordenação de Objetos (II) Automaticamente Ordenação natural dos objetos de seu tipo Java Collection Framework (Coleções) 2021.1 Escrevendo tipos comparáveis public interface Comparable<T>{ public int comparableTo(T o); } Estrutura possíveis retornos inteiro negativo: se objeto recebido como parâmetro < objeto atual; compareTo() zero: se o objeto recebido como parâmetro = objeto atual; inteiro positivo: se recebido como parâmetro > objeto atual Se objeto atual não puder ser comparado com o objeto passado como parâmetro, o método lança uma exceção. A classe que implementar a interface Comparable precisa implementar o método compareTo( ). Java Collection Framework (Coleções) 2021.1 Ordenando tipos comparáveis - Exemplo //Criar a classe Aluno package control; public class Aluno { int matricula; String nome, cidade; // MÉTODO CONSTRUTOR public Aluno(int matricula, String nome, String cidade) { this.matricula = matricula; this.nome = nome; this.cidade = cidade; } public String toString() { return this.matricula + " " + this.nome + " " + this.cidade; } } Java Collection Framework (Coleções) 2021.1 //Criar a interface InterfaceOrdena package control; import java.util.Comparator; public class InterfaceOrdena implements Comparator<Aluno> { // ORDENA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE public int compare(Aluno a, Aluno b) { return a.matricula - b.matricula; } } Ordenando tipos comparáveis - Exemplo Java Collection Framework (Coleções) 2021.1 //Criar a classe TestaCliente package model; import control.Aluno; import control.InterfaceOrdena; import java.util.ArrayList; import java.util.Collections; public class TestaCliente { public static void main (String[] args) { ArrayList<Aluno> alu = new ArrayList<Aluno>(); alu.add(new Aluno(1172, “PELE",“SANTOS")); alu.add(new Aluno(1171, “ZICO", “FLAMENGO")); alu.add(new Aluno(1173, “ROBERTO CARLOS", “PALMEIRAS")); alu.add(new Aluno(1170, “MARADONA", “BOCA JUNIORS")); System.out.println("LISTA NÃO ORDENADA"); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); Collections.sort(alu, new InterfaceOrdena()); System.out.println("\nLISTA ORDENADA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE "); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); } } Ordenando tipos comparáveis - Exemplo Java Collection Framework (Coleções) 2021.1 Ordenação não natural (I) objetos que não implementam Comparable? objetos de uma forma diferente da sua ordenação natural? Comparator (Objetos que implementam esta interface encapsulam uma ordenação) public interface Comparator<T>{ int compare(T o1, T o2); } Estrutura Java Collection Framework (Coleções) 2021.1 Ordenação não natural (II) compare() seus dois argumentos retorna inteiro negativo: se o primeiro objeto < segundo objeto inteiro positivo: se o primeiro objeto > segundo objeto zero: se o primeiro objeto = segundo objeto Se algum dos objetos for de um tipo inapropriado para o Comparator, o método lança uma exceção Java Collection Framework (Coleções) 2021.1 Ordenação não natural (II) - Exemplo //Criar a classe Aluno package control; public class Aluno { int matricula; String nome, cidade; public Aluno(int matricula, String nome, String cidade) { this.matricula = matricula; this.nome = nome; this.cidade = cidade; } public Integer getMatricula() { return matricula; } public void setMatricula(Integer matricula) { this.matricula = matricula; } public String toString() { return this.matricula + " " + this.nome + " " + this.cidade; } } Java Collection Framework (Coleções) 2021.1 Ordenação não natural (II) - Exemplo //Criar a interface InterfaceOrdena package control; import java.util.Comparator; public class InterfaceOrdena implements Comparator<Aluno> { // ORDENA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE public int compare(Aluno a, Aluno b) { return a.matricula - b.matricula; } } Java Collection Framework (Coleções) 2021.1 Ordenação não natural (II) - Exemplo//Criar a classe TestaCliente package model; import control.Aluno; import control.InterfaceOrdena; import java.util.ArrayList; import java.util.Collections; public class TestaCliente { public static void main (String[] args) { ArrayList<Aluno> alu = new ArrayList<Aluno>(); alu.add(new Aluno(1172, “PELE", “SANTOS")); alu.add(new Aluno(1171, “ZICO", “FLAMENGO")); alu.add(new Aluno(1173, “ROBERTO CARLOS", “PALMEIRAS")); alu.add(new Aluno(1170, “MARADONA", “BOCA JUNIORS")); System.out.println("LISTA NÃO ORDENADA"); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); Collections.sort(alu, new InterfaceOrdena()); System.out.println("\nOrdenação não natural"); System.out.println("\nLISTA ORDENADA POR MATRICULA DO ALUNO EM ORDEM CRESCENTE "); for (int i=0; i<alu.size(); i++) System.out.println(alu.get(i)); } } Java Collection Framework (Coleções) 2021.1 SortedSet elementos ordenados em ordem ascendente. Conjunto mantém ordem natural ou de acordo com um Comparator fornecido na criação do SortedSet Além das operações normais de um Set, disponibiliza operações para: Intervalo (subconjuntos); Pontos extremos; Acesso ao Comparator. Não precisa especificar a posição para adicionar um elemento Não aceita valores duplicados Os elementos não são ordenados, nem se mantém na ordem em que foram inseridos Set Sintaxe: SortedSet set = new TreeSet(); Java Collection Framework (Coleções) 2021.1 Ordenação SortedSet - Exemplopackage model; import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; public class OrdenaSet { public static void main(String[] args) { SortedSet set = new TreeSet(); set.add("MELANCIA"); set.add("TANGERINA"); set.add("ABACATE"); set.add("CAJÚ"); Iterator iterator = set.iterator(); System.out.println("ORDENAÇÃO E MANIPULAÇÃO DE COLEÇÃO SortedSet"); System.out.println(“MELHOR DO MUNDO: PELÉ\n"); System.out.println("EXIBIR TODOS OS ELEMENTOS EM ORDEM CRESCENTE"); while(iterator.hasNext()){ System.out.print(iterator.next().toString()+" "); } System.out.println("\n\nEXIBIR O SUBSET DE ABACATE ATÉ O ELEMENTO ANTES DE TANGERINA"); System.out.println(set.subSet("ABACATE","TANGERINA")); System.out.println("EXIBIR TODOS OS ELEMENTOS A PARTIR DO ELEMENTO - CAJÚ"); System.out.println(set.tailSet("CAJÚ")); System.out.println("EXIBIR TODOS ELEMENTOS ATÉ A POSIÇÃO - 1 DO ELEMENTO CAJÚ"); System.out.println(set.headSet("CAJÚ")); System.out.println("\nEXIBIR O PRIMEIRO ELEMENTO DO SET"); System.out.println(set.first()); System.out.println("\nEXIBIR O ULTIMO ELEMENTO DO SET"); System.out.println(set.last()); } } Java Collection Framework (Coleções) 2021.1 SortedMap Mantém chaves Ordenadas Ascendentemente ordenação natural ou de acordo com um Comparator fornecido no momento de sua criação A interface do SortedMap é análoga à interface do SortedSet. Sintaxe: SortedMap<Integer, String> map = new TreeMap<Integer, String>(); Java Collection Framework (Coleções) 2021.1 SortedMap - Métodos subMap (K deKey, K toKey): Retorna uma visualização da parte deste Mapa cujas chaves variam de fromKey, inclusive, a toKey, exclusivo. headMap (K toKey): Retorna uma vista da parte deste Mapa cujas chaves são estritamente menores que toKey. tailMap (K fromKey): Retorna uma visualização da parte deste Mapa cujas chaves são maiores ou iguais a fromKey. firstKey(): Retorna a primeira chave (mais baixa) atualmente neste mapa. lastKey(): Retorna a última chave (mais alta) atualmente neste mapa. comparator(): Retorna o Comparador usado para ordenar as chaves neste Mapa, ou null se este Mapa usa a ordenação natural de suas chaves. values (): Retorna uma visualização Collection dos valores contidos neste mapa. keySet (): Retorna uma visualização Set das chaves contidas neste mapa. entrySet (): Retorna uma visualização Set dos mapeamentos contidos neste mapa. Java Collection Framework (Coleções) 2021.1 SortedMap - Exemplopackage model; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; public class OrdenaMap { public static void main(String[] args) { SortedMap<Integer, String> map = new TreeMap<Integer, String>(); //CRIA UMA COLEÇÃO MAP COM SUAS CHAVES DESORDENADAS (FORA DE ORDEM) map.put( new Integer( 2 ), “ZICO" ); map.put( new Integer( 3 ), “RONALDO FENÔMERO" ); map.put( new Integer( 4 ), “MARADONA" ); map.put( new Integer( 1 ), “PELÉ" ); //Retorna uma visualização Set dos mapeamentos contidos neste mapa Set s = map.entrySet(); Iterator i = s.iterator(); // Usando o iterador no SortedMap // SAÍDA ORDENADA POR CHAVE DO MAP. while (i.hasNext()) { Map.Entry m = (Map.Entry)i.next(); int key = (Integer)m.getKey(); String value = (String)m.getValue(); System.out.println( "Chave : " + key + " Valor : " + value); } } } Java Collection Framework (Coleções) 2021.1 Implementações - Classes que implementam as interfaces do framework de coleções. Java Collection Framework (Coleções) 2021.1 Interfaces auxiliares (Iterator e ListIterator) -Iterator Interface que define as operações básicas para o percorrimento dos elementos da coleção. Java Collection Framework (Coleções) 2021.1 - iterar sobre os elementos de uma coleção Pode-se usar o comando for e o Iterator da coleção: package model; import java.util.Arrays; import java.util.List; public class ForTeste { public static void main(String[] args) { List<Integer> itens = Arrays.asList( 30, 8, 40, 5, 11 ); for(Integer item : itens){ System.out.println(item); } } } USO DO COMANDO FOR Interfaces auxiliar (Iterator) Java CollectionFramework (Coleções) 2021.1 • Iterator – (Listando os elementos de um ArrayList - Exemplo package model; import java.util.ArrayList; import java.util.Iterator; public class TestaIterator { public static void main(String args[]) { ArrayList al = new ArrayList(); al.add(“PELÉ"); al.add(“ZICO"); al.add(“RONALD FENÔMENO"); System.out.print("USANDO O Iterator DA COLEÇÃO"); System.out.println(); System.out.print(“PELÉ É MELHOR QUE MARADONA"); System.out.println(); System.out.print(" "); System.out.println(); // Usamos o iterator para mostrar o conteúdo do ArrayList System.out.print("ELEMENTOS ORIGINAIS DO ARRAYLIST: "); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); } } USO DO Iterator DA COLEÇÃO Java Collection Framework (Coleções) 2021.1 Interface auxiliar - ListIterator Interface que estende Iterator, adicionando funções específicas para coleções do tipo List. Java Collection Framework (Coleções) 2021.1 Java Collection Framework (Coleções) Interface auxiliar – ListIterator (exemplo) package model; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class TestaListIterator { public static void main(String args[]) { ArrayList al = new ArrayList(); al.add(“PELÉ"); al.add(“ZICO"); al.add(“MARADONA"); System.out.print("ELEMENTOS DO ARRAYLIST ORDEM ORIGINAL");System.out.println(); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); System.out.println(); // Modify objects being iterated ListIterator litr = al.listIterator(); while(litr.hasNext()) { Object element = litr.next(); litr.set(element + " "); } System.out.print("ELEMENTOS DO ARRAYLIST ORDEM INVERTIDA"); System.out.println(); while(litr.hasPrevious()) { Object element = litr.previous(); System.out.print(element + " "); } System.out.println(); } } 2021.1 Java Collection Framework (Coleções) for-each - Novidade do Java 5 e Java 8 - Variação do comando for com sintaxe simplificada para iterar nos elementos de uma coleção. ❖ A partir do Java 5 List<Integer> itens = Arrays.asList( 10, 8, 50, 1, 30 ); for (Integer item : itens) System.out.println(item); ❖ A partir do Java 8 List<Integer> itens = Arrays.asList( 10, 8, 50, 1, 30 ); itens.forEach(item->System.out.println(item)); 2021.1 • for-each (Listando os elementos de uma lista - Exemplo package model; import java.util.Arrays; import java.util.List; public class ForEachTeste { public static void main(String[] args) { List<Integer> itens = Arrays.asList( 10, 8, 50, 1, 30 ); itens.forEach(item->System.out.println(item)); } } Java Collection Framework (Coleções) 2021.1 Exercícios 1 – Codifique um programa usando Collection List em que: a – Crie um Array, atribuindo os nomes de cinco pessoas; b – Exiba na tela a: b1 – o Array com todos seus elementos; b2 – elemento por elemento do Array. 2 - Codifique um programa usando Collection Set em que: a – seja informado via teclado com uso da classe Scanner cinco nomes de frutas em uma coleção; b – exiba na tela a: b1 – os elementos os elementos da coleção; b1 – mensagem informando se foram informados nomes repetidos ou não na coleção. 3 – Codifique um programa usando o comando for-each para listar os elementos de uma Lista: Obs. Os elementos da lista deverão ser informados via teclado com uso da classe Scanner. 2021.1 4 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scannerpara a entrada dos dados. 5 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scanner para a entrada dos dados. c – Após todos os nomes armazenados na lista, exiba-os na tela 6 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado cinco números tipo inteiros; b – Use a classe Scanner para a entrada dos dados. c – Após todos os números armazenados na lista, exiba-os na tela 7 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado cinco números tipo inteiros; b – Use a classe Scanner para a entrada dos dados. c – Após todos os números armazenados na lista, exiba-os na tela usando o comando for-each Exercícios 2021.1 8 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado cinco números tipo inteiros; b – Use a classe Scannerpara a entrada dos dados. c – Após todos os números armazenados na lista, exiba-os na tela usando o comando for 9 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scanner para a entrada dos dados. c – Após todos os nomes armazenados na lista, exiba-os na tela usando o comando for-each. 10 – Codifique um programa em java que: a – Crie uma Lista, atribuindo via teclado o primeiro nome de cinco pessoas; b – Use a classe Scanner para a entrada dos dados. c – Após todos os nomes armazenados na lista, exiba-os na tela usando o comando for 11 – Codifique um programa usando Collection QUEUE em que: a – atribua via programa os nomes de dez frutas em uma coleção. b – exiba os dados inseridos na coleção. Exercícios 2021.1 12 - Codifique um programa usando Collection QUEUE em que: a – atribua via programa os números 100, 150 e 200 em uma coleção. b – exiba os números inseridos na coleção. 13 – Quais as características da interface Set? 14 - Codifique em Java, as linhas de códigos para criar uma Coleção List e adicionar dois elementos na lista criada. Exercícios 2021.1 Bancos de Dados 113 ❑ Middleware ❑ Consulta e manipulação de dados com JDBC 2021.1 Middleware • É o software de computador que fornece serviços para softwares aplicativos além daqueles disponíveis pelo sistema operacional. • Pode ser descrito como "cola de software". 2021.1 Middleware O middleware também pode ser utilizado para processamento distribuído com ações que ocorrem em tempo real em vez de envio e recebimento repetitivo de dados. 2021.1 Utilidade do Middleware Facilitar o desenvolvimento de aplicações, tipicamente as distribuídas, assim como facilitar a integração de sistemas legados ou desenvolvidos de forma não integrada automática. 2021.1 Middleware de Banco de Dados É qualquer conjunto de APIs que facilita a comunicação com um banco de dados, seja de um aplicativo ou entre bancos de dados, usado por desenvolvedores para extrair informações de bancos de dados locais ou remotos. 2021.1 Middleware de Servidor de Aplicativos • API padronizada para acesso • Uma implementação para o modelo de arquitetura • Uma ou mais interfaces de gerenciamento 2021.1 Middleware Orientado a Mensagens • Um cliente pode enviar e receber mensagens de forma assíncrona de qualquer outro cliente, conectados a um agente especial que fornece facilidades para criar, enviar, receber e ler mensagens. 2021.1 Middleware Web • Dono do Recurso (Resource Owner): uma entidade capaz de conceder acesso à um recurso protegido (pode ser o usuário final). • Servidor do Recurso (Resource Server): o servidor que hospeda os recursos protegidos. O acesso a ele é feito através de tokens. • Cliente (Client): uma aplicação requisitando recursos protegidos, através da autorização do dono. • Servidor de Autorização (Authorization Server): servidor que emite tokens de acesso ao cliente, depois de sua autenticação e obtenção de autorização. 2021.1 Middleware Web - Exemplo 2021.1 Monitores de Processamento de Transações • comunicação entre plataformas e aplicações • uso de API bem definida e aberta • uso de protocolos bem definidos e abertos • ser utilizadas em múltiplas plataformas • manter separação de camadas para segurança e portabilidade• recuperar dados e consolidar a partir de múltiplas fontes • fornecer acesso a tecnologias distintas 2021.1 O Middleware pode abranger uma variedade de tipos de Software • Interface de programação de aplicações (API) • Servidor de aplicações • Integração de aplicações • Integração de dados • Processamento de transações (TP) • Chamada de procedimento remoto (RPC) 2021.1 API JDBC A biblioteca JDBC define o MiddlewareJava para acesso a qualquer tipo de banco de dados, permitindo o manuseio das informações com um pequeno conjunto de classes, pertencentes ao pacote: java.sql.* 2021.1 JDBC Java Database Connectivity • É um conjunto de classes e interfaces (API) escritas em Java que fazem o envio de instruções SQL para qualquer banco de dados relacional • API de baixo nível e base para API’s de alto nível • Amplia o que você pode fazer com Java • Possibilita o uso de Bancos de Dados já instalados 2021.1 JDBC tipo 1: Ponte JDBC-ODBC Esta ponte é normalmente usada quando não há um driver puro-Java (tipo 4) para determinado banco de dados, pois seu uso é desencorajado devido à dependência de plataforma. 2021.1 JDBC Tipo 2: Driver API-Nativo Traduz as chamadas JDBC para as chamadas da API cliente do banco de dados usado. Como a Ponte JDBC-ODBC, pode precisar de software extra instalado na máquina cliente. 2021.1 JDBC tipo 3: Puro Java Converte as chamadas JDBC diretamente no protocolo do banco de dados utilizado. Implementado em Java, normalmente é independente de plataforma e escrito pelos próprios desenvolvedores. É o tipo mais recomendado para ser usado. 2021.1 JDBC Tipo 4: Protocolo de Rede Traduz a chamada JDBC para um protocolo de rede independente do banco de dados utilizado, que é traduzido para o protocolo do banco de dados por um servidor. 2021.1 Java DB (Derby) 2021.1 Java DB (Derby) NetBeans IDE Versão Java EE 7.2, 7.3, 7.4, 8.0 JDK (Java Development Kit) Versão 7 ou 8 Java DB Versão 10.4.x, 10.5.x • O Java DB é instalado quando o JDK 7 ou JDK 8 é instalado (com exceção do Mac OS X) • Se estiver usando Mac OS X é possível fazer o download e instalar o Java DB manualmente ou usar o Java DB que é instalado pela versão do Java EE do instalador do NetBeans IDE. 2021.1 Configurando o Banco de Dados Se você tem o GlassFish Server Enterprise registrado na instalação NetBeans IDE, o Java DB já estará registrado. Portanto, é possível pular para Iniciando o Servidor. Se fizer download do GlassFish Server separadamente e necessitar de ajuda ao registrar no NetBeans IDE, consulte Registrando uma Instância do GlassFish Server no Conteúdo de Ajuda IDE (F1). Se você tiver submetido o Java DB a download, siga as etapas a seguir. 1. Execute o arquivo de autoextração. Uma pasta denominada 'javadb' será criada no mesmo local do arquivo. Se você tiver apenas submetido o Java DB a download e desejar que o servidor de banco de dados fique em um local diferente de onde ele foi extraído, deverá realocá-lo agora. 2. No sistema, crie um novo diretório para ser utilizado como diretório home para as instâncias individuais do servidor de banco de dados. Por exemplo, é possível criar esta pasta no diretório-raizJava DB (javadb) ou em qualquer outra localização. Antes de prosseguir, é importante compreender os componentes encontrados no diretório raiz do Java DB: O subdiretório demo contém os programas de demonstração. O subdiretório bin contém os scripts para executar utilitários e configurar o ambiente. O subdiretório javadoc contéma documentação da API que foi gerada de comentários de código-fonte. O subdiretório docs contém a documentação do Java DB. O subdiretório lib contém os arquivos jar do Java DB. 2021.1 Conexão JDBC com o Banco de Dados • Conexão do banco de dados (MySQL) String url = "jdbc:mysql://localhost:3306/Banco01“; String user = “estacio“; String password = “estacio"; • Conexão do banco de dados derby (Java DB) DriverManager.getConnection( "jdbc:derby://localhost:1527/Banco01",“estacio", “estacio“ ); 2021.1 Criar Novo Projeto NetBeans Arquivo > Novo Projeto... > Escolher Projeto... 2021.1 Criar Novo Projeto NetBeans Arquivo > Novo Projeto... > 1. Escolher Projeto... 2. Nome e Localização... 2021.1 Projeto “Biblioteca” com um “controlador” criado 2021.1 Registrando o Banco de Dados no NetBeans IDE Na janela Serviços, clique com o botão direito do mouse no nó do Banco de Dados Java DB e escolha Propriedades para abrir a caixa de diálogo das Definições do JavaDB 2021.1 Registrando o Banco de Dados no NetBeans IDE No campo de texto Instalação de Java DB, insira o caminho para o diretório-raiz de Java DB (javadb) especificado na etapa anterior 2021.1 Registrando o Banco de Dados no NetBeans IDE • Para a Localização do Banco de Dados, use o local default se um local já foi fornecido. Clique em OK • Por exemplo, a localização default pode parecer com C:\Documents and Settings\username\.netbeans-derby em um computador Windows. 2021.1 Iniciando o Servidor Na janela Serviços, clique com o botão direito do mouse no nó Java DB e escolha Iniciar Servidor. Observe a seguinte saída na janela de Saída, indicando que o servidor foi iniciado: 2021.1 Saída – Processo do Banco de Dados JavaDB Wed Oct 16 10:00:42 BRT 2019 : DRDA_SecurityInstalled.I Wed Oct 16 10:00:42 BRT 2019 : Apache Derby Servidor de Rede - 10.10.2.0 - (1582446) iniciado e pronto para aceitar conexões na porta 1527 em {3} 2021.1 Criando um Banco de Dados Clique com o botão direito do mouse no nó do Java DB e escolha Criar Banco de Dados para abrir a caixa de diálogo de criação do Banco de Dados do Java DB. 2021.1 Criando um Banco de Dados 2021.1 Banco de Dados Criado 2021.1 Estabelecendo Conexão com o Banco de Dados Na janela Serviços do IDE você pode realizar as seguintes tarefas comuns em estruturas de banco de dados: • criação, exclusão, modificação de tabelas • preenchimento de tabelas com dados • exibição de dados tabulares • execução de consultas e instruções SQL 2021.1 Usando a Caixa de Diálogo Criar Tabela 1 - Expanda o nó de conexão BD de Contato e observe que existem vários subnós do esquema. O esquema app é o único esquema que se aplica a este tutorial. Clique com o botão direito do mouse no nó APP e escolha Definir como Esquema Default. 2021.1 Usando a Caixa de Diálogo Criar Tabela 2 - Expanda o nó APP e observe que existem três subpastas: Tabelas, Views e Procedimentos. 2021.1 Usando a Caixa de Diálogo Criar Tabela 3 - Clique com o botão direito no nó Tabelas e escolha Criar Tabela para abrir a caixa de diálogo Criar Tabela. 2021.1 Usando a Caixa de Diálogo Criar Tabela 4 - No campo de texto Nome da Tabela, digite AUTORES. 2021.1 Adicionar Coluna Chave Índice Nulo Exclusiva Nome da coluna Tipo de dados Tamanho [marcada] [marcada] [marcada] id INTEIRO 0 [marcada] NOME VARCHAR 20 [marcada] SOBRENOME VARCHAR 20 2021.1 Adicionar Coluna Chave Índice Nulo Exclusiva Nome da coluna Tipo de dados Tamanho [marcada] [marcada] [marcada] id INTEIRO 0 [marcada] NOME VARCHAR 20 [marcada] SOBRENOME VARCHAR 20 2021.1 Usando o Editor SQL • Na janela Serviço, clique com o botão direito no nó de conexão BD de AUTORESou no nó Tabelas embaixo e escolha o Comando Executar. • Uma tela em branco é aberta no Editor SQL na janela principal. 2021.1 Insira a seguinte consulta no Editor SQL: CREATE TABLE “EDITORES" ( "ID" INTEGER not null primary key, "NOME" VARCHAR(30), "EMAIL" VARCHAR(60) ); 2021.1 Adicionando Dados na Tabela INSERT INTO EDITORES VALUES(1, 'EDITORA ÉRICA' ,'contato@erica.com.br'); INSERT INTO EDITORES VALUES(2, 'NOVATEC EDITORA' ,'contato@novatec.com.br'); INSERT INTO EDITORES VALUES(3, 'EDITORASARAIVA' ,'contato@saraiva.com.br'); INSERT INTO EDITORES VALUES(4, 'EDITORA VIENA' ,'contato@viena.com.br'); INSERT INTO EDITORES VALUES(5, 'EDITORA CIÊNCIA MODERNA','contato@cm.com.br'); INSERT INTO EDITORES VALUES(6, 'EDITORA SENAC' ,'contato@senac.com.br'); INSERT INTO EDITORES VALUES(7, 'EDITORA FTD' ,'contato@ftd.com.br'); 2021.1 DAO – Data Access Object 2021.1 Exemplo DAO – Data Access Object 2021.1 Criando Conexão com JDBC 2021.1 Classe “AutorDAO”: SQLINSERT 2021.1 Classe “AutorDAO”: SQLUPDATE 2021.1 Classe “AutorDAO”: SQLDELETE 2021.1 Classe “AutorDAO”: consultaUmAutor() 2021.1 Classe “AutorDAO”: consultaListaAutores() 2021.1 Exercício 1 Criar as classes de negócio acima…. 2021.1 Exercício 2 Criar as tabelas: EDITORES, REVISTAS, LIVROS, ARTIGOS e ASSUNTOS 2021.1 Exercício 3 Criar as classes DAO para: EDITORES, REVISTAS, LIVROS, ARTIGOS e ASSUNTOS 2021.1 PROFESSOR: HENRIQUE TAVARES PROGRAMAÇÃO II CCT0695
Compartilhar