Persistência – Java para Web com MySQL 1. 2. 3. 4. Criar o modelo no DBDesigner Criar o esquema e as tabelas no MySQL Criar um projeto Java simples, com o nome Empresa,no NetBeans Adicionar o driver de conexão MySQL: a. Descompactar o arquivo com o driver em algum diretório b. Clicar com o botão direito sobre o diretório biblioteca e adicionar jar c. Localizar o arquivo contendo o driver e adicioná-lo 5. Criar três pacotes: modelo, persistencia e teste 6. No pacote teste, criar a classe TestaConexao: package teste; import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement; public class TestaConexao { public static void main (String args[]) throws SQLException{ Connection conexao = null; String url = "jdbc:mysql://”servidor”:3306/empresa"; String usuario = "professor"; String senha = "professor"; try{ Class.forName("org.gjt.mm.mysql.Driver"); conexao = DriverManager.getConnection(url, usuario, senha); System.out.println("Conexão efetuada com sucesso!!!"); }catch(ClassNotFoundException cnfe){ System.out.println("Erro ao carregar o driver"); cnfe.printStackTrace(); } } } 7. Simular e testar erros na classe anterior 8. Criar uma classe no pacote persistência que contenha o método estático: getConexao(): package persistencia; import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement; public class GerenteConexao { //metodo estático gerador de conexões public static Connection getConexao(){ Connection conexao = null; String url = "jdbc:mysql://localhost:3306/empresa"; String usuario = "root"; String senha = "root"; try{ Class.forName("org.gjt.mm.mysql.Driver"); conexao = DriverManager.getConnection(url, usuario, senha); System.out.println("Conexão efetuada com sucesso!!!"); }catch(ClassNotFoundException cnfe){ System.out.println("Erro ao carregar o driver"); cnfe.printStackTrace(); } catch(SQLException sqle){ System.out.println("Não foi possível conectar com o BD"); sqle.printStackTrace(); } return conexao; } } 9. Testar a classe 10. Criar uma classe TestaEmpregado contendo o método main() para testar a conexão com o banco de dados: package teste; import import import import java.sql.Connection; java.sql.PreparedStatement; java.sql.SQLException; persistencia.GerenteConexao; public class TestaEmpregado { public static void main(String a[]){ Connection con = GerenteConexao.getConexao(); PreparedStatement pst = null; try{ String sql = "INSERT INTO EMPREGADO(CODIGO, NOME, IDADE) VALUES(1,'Maria',25)"; pst = con.prepareStatement(sql); pst.executeUpdate(); System.out.println("Dados inseridos com sucesso!!!"); }catch(SQLException sqle){ System.out.println("Não foi possível inserir os dados!!"); } } 11. Alterar a classe: String sql = "INSERT INTO EMPREGADO(CODIGO, NOME, IDADE) VALUES(?,?,?)"; pst = con.prepareStatement(sql); pst.setInt(1,2); pst.setString(2,"José"); pst.setInt(3,28); pst.executeUpdate(); 12. Criar o classe EmpregadoDAO e o método grava: import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class EmpregadoDAO { public static int grava(int codigo, String nome, int idade) { Connection con = GerenteConexao.getConexao(); PreparedStatement pst = null; int ret = 0; try { String sql = "INSERT INTO EMPREGADO(CODIGO, NOME, IDADE) VALUES(?,?,?)"; pst = con.prepareStatement(sql); pst.setInt(1, codigo); pst.setString(2, nome); pst.setInt(3, idade); ret = pst.executeUpdate(); System.out.println("Dados inseridos com sucesso!!!"); } catch (SQLException sqle) { System.out.println("Não foi possível inserir os dados!!"); } return ret; } } 13. Imagine criar um método grava para uma tabela com 100 campos! Então chegou a hora de criarmos uma classe bean no pacote modelo para que possamos instanciar objetos dessa classe. package modelo; public class Empregado { private int codigo; private String nome; private int idade; public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } public String toString(){ return "Código = "+getCodigo()+ "\nNome = "+getNome()+ "\nIdade = "+getIdade(); } } 14. Agora vamos atualizar o nosso método grava, passando como parâmetro um objeto e não mais cada um dos campos: public static int grava(Empregado empregado) { Connection con = GerenteConexao.getConexao(); PreparedStatement pst = null; int ret = 0; try { String sql = "INSERT INTO EMPREGADO(CODIGO, NOME, IDADE) VALUES(?,?,?)"; pst = con.prepareStatement(sql); pst.setInt(1, empregado.getCodigo()); pst.setString(2, empregado.getNome()); pst.setInt(3, empregado.getIdade()); ret = pst.executeUpdate(); System.out.println("Dados inseridos com sucesso!!!"); } catch (SQLException sqle) { System.out.println("Não foi possível inserir os dados!!"); } return ret; } Vamos testar o nosso método grava, para isso vamos criar uma classe de teste, chamada 15. TestaEmpregadoDAO: TestaEmpregadoDAO: public class TestaEmpregadoDAO { public static void main(String args[]){ Empregado empregado = new Empregado(); empregado.setCodigo(3); empregado.setNome("Luiz"); empregado.setIdade(45); EmpregadoDAO.grava(empregado); } } 16. Agora vamos criar o método altera: public static int altera(Empregado empregado) { Connection con = GerenteConexao.getConexao(); PreparedStatement pst = null; int ret = 0; try { String sql = "UPDATE EMPREGADO SET NOME = ?, IDADE = ? WHERE CODIGO = ?"; pst = con.prepareStatement(sql); pst.setString(1, empregado.getNome()); pst.setInt(2, empregado.getIdade()); pst.setInt(3, empregado.getCodigo()); ret = pst.executeUpdate(); System.out.println("Dados atualizados com sucesso!!!"); } catch (SQLException sqle) { System.out.println("Não foi possível atualizar os dados!!"); sqle.printStackTrace(); } return ret; } 17. Vamos criar o método exclui: public static int exclui(int codigo) { Connection con = GerenteConexao.getConexao(); PreparedStatement pst = null; int ret = 0; try { String sql = "DELETE FROM EMPREGADO WHERE CODIGO = ?"; pst = con.prepareStatement(sql); pst.setInt(1, codigo); ret = pst.executeUpdate(); System.out.println("Dados excluído com sucesso!!!"); } catch (SQLException sqle) { System.out.println("Não foi possível excluir os dados!!"); sqle.printStackTrace(); } return ret; } 18. Criar um método para montar o objeto: public static Empregado le(int codigo) { Connection con = GerenteConexao.getConexao(); PreparedStatement pst = null; ResultSet rs = null; Empregado empregado = null; try { String sql = "SELECT * FROM EMPREGADO WHERE CODIGO = ?"; pst = con.prepareStatement(sql); pst.setInt(1, codigo); rs = pst.executeQuery(); if (rs.next()){ empregado = new Empregado(); empregado.setCodigo(rs.getInt("codigo")); empregado.setNome(rs.getString("nome")); empregado.setIdade(rs.getInt("idade")); } System.out.println("Dados excluído com sucesso!!!"); } catch (SQLException sqle) { System.out.println("Não foi possível excluir os dados!!"); sqle.printStackTrace(); } return empregado; } 19. Para testar o método Le(), vamos criar o método toString na classe Empregado; public String toString(){ return "código = "+getCodigo()+ "\nNome = "+getNome()+ "\nIdade = "+getIdade(); } 20. Vamos criar outro método para ler todos os empregados do banco de dados: public static List<Empregado> leTodos() { List <Empregado> empregados = new ArrayList(); Connection con = GerenteConexao.getConexao(); Statement st = null; ResultSet rs = null; Empregado empregado = null; try { st = con.createStatement(); rs = st.executeQuery("SELECT * FROM EMPREGADO;"); while (rs.next()){ empregado = new Empregado(); empregado.setCodigo(rs.getInt("codigo")); empregado.setNome(rs.getString("nome")); empregado.setIdade(rs.getInt("idade")); empregados.add(empregado); } System.out.println("Dados lidos com sucesso!!!"); } catch (SQLException sqle) { System.out.println("Não foi possível ler os dados!!"); sqle.printStackTrace(); } return empregados; } Parte II – Desenvolvimento Web 21. Vamos criar um formulário para inserir os campos: <div> <form name="form1" action="Controle" > Matrícula:<br> <input type="text" name="matricula"><br><br> Nome:<br> <input type="text" name="nome"><br><br> Idade:<br> <input type="text" name="idade"><br><br> <input type="submit" value="Incluir"> </form> </div> 22. Clicar no botão submit e ver o resultado 23. Vamos criar o Servlet Controle: a. Criar um pacote chamado servlet em “Pacotes de código fonte” b. Criar um servlet com o nome Controle dentro do pacote servet criado 24. Clicar novamente no botão submit e ver o resultado novamente 25. Apagar os comentários do método: protected void processRequest 26. Apagar todo o conteúdo do método: protected void processRequest 27. Agora vamos adicionar o .jar da aplicação que contém as informações necessárias ao nosso projeto web: a. Primeiro vamos criar o .jar, clicando com o botão direito sobre a aplicação e escolhendo a opção build ou construir se estiver em português b. Depois procure o caminho da aplicação e adicione o .jar que se encontra dentro do diretório dist 28. Receber os dados dentro do método processRequest: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Empregado empregado = new Empregado(); PrintWriter out = response.getWriter(); try { empregado.setCodigo(Integer.parseInt(request.getParameter("matricula"))); empregado.setNome(request.getParameter("nome")); empregado.setIdade(Integer.parseInt(request.getParameter("idade"))); out.println(empregado); } finally { out.close(); } } 29. Para gravar, altere o servlet: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Empregado empregado = new Empregado(); PrintWriter out = response.getWriter(); try { empregado.setCodigo(Integer.parseInt(request.getParameter("matricula"))); empregado.setNome(request.getParameter("nome")); empregado.setIdade(Integer.parseInt(request.getParameter("idade"))); EmpregadoDAO.grava(empregado); } finally { out.close(); } 30. Para verificar qual a ação foi executada, use o mesmo name para os botões e um value para cada botão. <input type="submit" value="grava" name="acao"> <input type="submit" value="exclui" name="acao"> 31. Agora altere o servlet para verificar qual a ação e realizá-la: try { empregado.setCodigo(Integer.parseInt(request.getParameter("matricula"))); empregado.setNome(request.getParameter("nome")); empregado.setIdade(Integer.parseInt(request.getParameter("idade"))); String acao = request.getParameter("acao"); if (acao.equals("grava")){ EmpregadoDAO.grava(empregado); }else if(acao.equals("exclui")){ EmpregadoDAO.exclui(empregado.getCodigo()); } out.print(empregado); } finally { out.close(); }