UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 1 Persistência de Classes em Tabelas de Banco de Dados 1) Introdução ! Em algumas situações, pode ser necessário preservar os objetos criados em uma aplicação de maneira permanente. Ou seja, os dados fornecidos pelo usuário devem poder ser resgatados em uma outra oportunidade ou instante. ! Uma das maneiras de se “persistir” os dados é armazenar os seus valores em tabelas de um banco de dados. ! Pode-se considerar que existem basicamente dois tipos de banco de dados: i) os banco de dados orientados a objetos e ii) os banco de dados que não são orientados a objetos. Nesse material é considerado apenas o banco de dados não orientado a objetos. ! Normalmente, uma classe deverá ter o seu equivalente em forma de tabela, conforme ilustra a Figura 1. Nesse caso, cada atibuto será uma coluna na tabela, o nome da tabela será o nome da classe e o nome do banco de dados, o nome do pacote. Figura 1 - Exemplo de classe: Classe Pessoa e a sua correspondente tabela de armazenamento de dados. ! ! Existe também a possibilidade que uma classe tenha o seu atributo armazenado em diversas tabelas ou que uma tabela armazene informações de mais de uma classe. UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 2 ! 2) Exemplo Prático - Como criar uma tabela. ! Como exemplo prático, a classe exemplificada na Figura 2 terá os seus parâmetros persistidos em uma tabela do banco de dados. Na Figura 2, apenas os atributos da classe estão representados. Figura 2 - Exemplo de classe: Classe Pessoa ! De maneira reduzida, os passos a serem seguidos são dois a saber: * criar uma base de dados * criar uma tabela com os atributos da classe 2.1 Procedimentos detalhados no ambiente NetBeans. 1) No ambiente NetBeans, selecione a guia de serviços ou “service”, conforme ilustra a Figura 3. De acordo com a sua opção de instalação e “plugins” instalados, a sua interface poderá conter mais ou menos elementos na lista da Figura 3. Para o exemplo descrito neste material, há a necessidade da presença do elemento “Databases”. Na Figura 3, esse é o primeiro elemento da lista de serviços . UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 3 Figura 3 - Aba Service do ambiente NetBeans que permite acessar, entre outras coisas, uma pequena interface de manipulação de Banco de Dados. 2) Com um clique no elemento “Databases” da lista, a seguinte janela se abrirá: Figura 4 - Opções do elemento databases. ! A lista apresentada na Figura 4 descreve uma pequena amostra do banco MySQL (se ele estiver instalado em seu computador) e do banco de dados “Java DB”. Esses bancos devem ter sido instalados de maneira automática durante a instalação do próprio NetBeans. ! Para persistir os dados de uma classe, iremos guardar os dados no banco de dados “Java DB”. Antes de definir a tabela que armazenará os dados, há a necessidade de definir uma base de dados ou um “database”. 3) Com um clique do botão direito do mouse no elemento “Java DB”, selecione a opção “create database” conforme ilustrado na Figura 4. UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 4 Figura 4 - Opção de Criar Database. 4) Após selecionado essa opção, uma nova janela será apresentada. Nessa janela, ilustrada na Figura 5, o desenvolvedor necessita especificar o nome do Banco de Dados (Database Name), quem terá acesso ao banco (User Name) de dados e a senha de acesso (Password). Figura 5 - Definição do nome da base de dados. ! Conforme sugerido, na Figura 5, o nome escolhido para a base de dados foi “academico”. Feito isso, o ambiente irá refletir essa operação, conforme ilustrado na Figura 6. Conforme destacado na Figura 6, a base de dados criada gera duas novas informações na lista: 1) Academico e 2) “jdbc:derby://localhost:1527/academico ...”. UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 5 Figura 6 - Relação entre a base de dados criada e o driver utilizado 5) Para criar uma tabela, basta clicar na opção “jdbc:derby://localhost:1527/academico... | Tables ”. A Figura 7 apresenta a estrutura que será apresentada: Figura 7 - Acesso a Tabelas, Views e Procedures do banco de dados ! Após isso, com um clique com o botão direito do mouse no elemento “Tables” o menu “popup” para a criação de uma tabela será apresentado. Um exemplo do menu pop-up é apresentado na Figura 7. ! Como exemplo, será criada uma tabela Pessoa que corresponde à classe Pessoa ilustrada na Figura 1. Para fazer isso, selecione a opção “Execute Command...”, conforme ilustra a Figura 8 a seguir. Figura 7 - Opção para enviar instruções diretamente ao banco de dados. UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 6 ! ! Na janela de edição que aparecerá, digite digite as seguintes instruções, conforme ilustra a Figura 9. Figura 9 - Instrução na linguagem SQL para a criação da tabela Pessoa. 6) Clique no botão “Run SQL” para eexecutar a instrução. Figura 10 - Botão “Run SQL”. 3. Como criar uma aplicação java para acessar a tabela. 1) No NetBeans, selecione “Novo Projeto” e a opção “Java | Java Application”, conforme ilustra a Figura 11. Figura 11 - Interface de definição de aplicação 2) Defina as características da sua aplicação. A Figura 12 exemplifica essas opções. UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 7 Figura 12 - Exemplo de configuração de uma aplicação java 3) A seguir, crie uma nova classe. Essa nova classe será responsável por acessar o banco de dados. ! No pacote “acessabd”, clique com o botão direito do mouse e selecione as opções “New | Java Class...”, conforme ilustrado na Figura 13. Figura 13 - Criação de uma nova classe. ! Essa nova classe será a classe denominada Conecta. O código dessa classe que permite a conexão com o banco de dados é apresentado a seguir. package acessabd; import java.sql.*; public class Conecta { private Connection con; private Statement stm; UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 8 private String bd = "jdbc:derby://localhost:1527/ACADEMICO"; private String driver = "org.apache.derby.jdbc.ClientDriver"; private String usuario="noronha"; private String senha="noronha"; private String database="Academico"; public void open( ) { try { Class.forName(driver); con = DriverManager.getConnection(bd,usuario,senha); stm = con.createStatement(); } catch(java.lang.Exception e) {System.out.println(e);} } public void close( ) { if ((stm != null) && (con != null)) try { stm.close( ); con.close( ); } catch (java.sql.SQLException e){System.out.println(e);} } public void executeMe(String comando) { try {open(); stm.executeUpdate(comando); close();} catch(java.lang.Exception e) {System.out.println(e); close( ); } } UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 9 public String listAll() { String saida = ""; ResultSet consulta; try{ open(); consulta = stm.executeQuery( "select * from Academico.pessoa"); while (consulta.next()) { saida += "\n\n*************************************"; saida += "\n Nome = " + consulta.getString("nome"); saida += "\n Codigo = " + consulta.getString("codigo"); saida += "\n Cidade de nascimento = " + consulta.getString("cidade_de_nascimento"); saida += "\n Documento de Identidade = " + consulta.getString("DocId"); saida += "\n Tipo do Documento = " + consulta.getString("tipoDoc"); } } catch(java.sql.SQLException e) {System.out.println(e); close(); return null; } close(); return saida; } } 4) Na classe Main, o código ilustrado a seguir deverá ser digitado na classe principal: package acessabd; public class Main { public static void main(String[] args) { Conecta c = new Conecta( ); c.open(); String comando = "insert into academico.pessoa " + " ( nome, cidade_de_nascimento, docid, tipoDoc)" UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 10 + " values (1,\"Maria Joana \", \"Curitiba\" " + ", \"11111\", 0) ; "; c.executeMe(comando); System.out.println("\n"+comando); System.out.println(c.listAll()); c.close(); System.out.println("fim"); } } 5) A Figura 14 a seguir, ilustra um possível errro de execução que poderá ocorrer caso os drivers de acesso ao banco de dados não tenham sido localizados pelo ambiente NetBeans. O Erro que poderá ocorre é um erro de ! ! ! java.lang.ClassNotFoundException. Figura 14 - Erro de falta de acesso ao driver necessário. ! Em resumo, o ambiente NetBeans não sabe que a sua aplicação necessita acessar esse driver. Logo, há a necessidade de especificar esse driver para o ambiente. 3. Como configurar o NetBeans para utilizar o driver de acesso ao banco de dados 1) Para especificar um driver para o ambiente é necessário e suficiente que a opção “Libraries” do projeto receba um clique com o botão direito do mouse e a opção “Add Library...” seja selecionada, conforme ilustra a Figura 15a), caso voce esteja trabalhando com o banco de dados MySQL. Se o seu banco de dados for o JavaDB, voce precisará selecionar a opção “Add Jar/Folder” conforme ilustra a Figura 15b). UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 11 interface Windows: Interface Mac: a) para adicionar um driver da biblioteca “Add Library” (necessário para acessar o MySQL) b) para adicionar um driver da biblioteca armazenado em uma pasra (necessário para o uso do JavaDB). Figura 15 - Adição de acesso a drivers no ambiente. 2) Caso voce tenha selecionado “Add Library”, siga o passo definido em 2a). Caso voce tenha selecionado “add Jar/Folder” vá para o passo 2b). ** 2a) Uma janela com as bibliotecas possíveis de serem adicionadas ao projeto é apresentada, conform ilustra a Figura 16. Figura 16 - Lista de drivers disponíveis. ! Escolha o driver “MySQL JDBC Driver” e clique no botão “Add Library”. UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). Prof. Robinson Vida Noronha Tema: Persistência de Classes 12 **2b) Uma janela para seleção de diretório será apresentada, conforme ilustra a Figura 17. Selecione o diretório que é indicado pela Figura 17 (“c:\arquivos de programas\sun\javadb\lib”). Após isso, selecione o driver “derbyClient.jar”, conforme ilustra a Figura 18 . Figura 17 - Localização do Driver para acessar o JavaDB Figura 18 - Driver a ser selecionado: derbyclient.jar 3) Encerrado o processo de adicionar essa nova biblioteca ao projeto, se novamente executado, não haverá mais mensagem de erro.