Home Page: http://www.posse.ueg.br/index.php/conexao-ueg/meuperfil/userprofile/ronaldo www.posse.ueg.br Lista de exercícios I - RESPOSTAS Servlets e banco de dados Dado o diagrama de classe abaixo: 1. Crie um banco de dados e as tabelas para armazenar as classes acima. CREATE TABLE `cliente` ( `id` INTEGER(11) NOT NULL AUTO_INCREMENT, `nome` VARCHAR(70) COLLATE latin1_swedish_ci NOT NULL DEFAULT '', `documento` VARCHAR(30) COLLATE latin1_swedish_ci NOT NULL DEFAULT '', `ativo` ENUM('S','N') COLLATE latin1_swedish_ci DEFAULT 'S', PRIMARY KEY USING BTREE (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' COMMENT='InnoDB free: 7168 Kb; CREATE TABLE `pedido` ( `id` INTEGER(11) NOT NULL, `data` DATE NOT NULL, `id_cliente` INTEGER(11) NOT NULL, `valor` DOUBLE(10,2) DEFAULT NULL, PRIMARY KEY USING BTREE (`id`), KEY `id_cliente` USING BTREE (`id_cliente`), CONSTRAINT `pedido_fk1` FOREIGN KEY (`id_cliente`) REFERENCES `cliente` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE ) ENGINE=InnoDB CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci' COMMENT='InnoDB free: 7168 kB; (`id_cliente`) REFER `venda/cliente`(`id`) ON DELETE NO AC'; 2. Utilizando o padrão Connection Factory crie uma classe para conectar ao banco dados conforme os dados abaixo: a. Servidor: localhost b. Nome: venda c. Usuário: <<conforme configuração do banco>> d. Senha: <<conforme configuração do banco>> package br.ueg.posse.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Database { public static Connection getConexao() throws SQLException{ try { Class.forName("com.mysql.jdbc.Driver"); return DriverManager.getConnection("jdbc:mysql://localhost:3306/venda?user=root&password="); } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } } } 3. Utilizando a linguagem Java, crie o modelo para representar a classe Cliente. package br.ueg.posse.modelo; public class Cliente { private Integer id; private String nome; private String documento; private Double saldo; private Ativo ativo; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getDocumento() { return documento; } public void setDocumento(String documento) { this.documento = documento; } public Double getSaldo() { return saldo; } public void setSaldo(Double saldo) { this.saldo = saldo; } public Ativo getAtivo() { return ativo; } public void setAtivo(Ativo ativo) { this.ativo = ativo; } } 4. Utilizando a linguagem Java, e o padrão DAO (Data Access Object), crie uma classe com os métodos descritos no diagrama de classes Cliente. package br.ueg.posse.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import br.ueg.posse.db.Database; import br.ueg.posse.modelo.Cliente; public class ClienteDAO { private Connection conexao; public ClienteDAO() throws SQLException { conexao = Database.getConexao(); } public void incluir(Cliente cliente) throws SQLException{ String sql = "INSERT INTO cliente (nome,documento,saldo,ativo)" + "values(?,?,?,?)"; PreparedStatement stmt = conexao.prepareStatement(sql); stmt.setString(1, cliente.getNome()); stmt.setString(2, cliente.getDocumento()); stmt.setDouble(3, cliente.getSaldo()); stmt.setString(4, cliente.getAtivo().name()); stmt.execute(); } public void excluir(Cliente cliente) throws SQLException{ String sql = "DELETE cliente WHERE id=?"; PreparedStatement stmt = conexao.prepareStatement(sql); stmt.setInt(1, cliente.getId()); stmt.execute(); } public void alterar(Cliente cliente) throws SQLException{ String sql = "UPDATE cliente SET (nome=?, documento=?, saldo=?, ativo=?) WHERE id=?"; PreparedStatement stmt = conexao.prepareStatement(sql); stmt.setString(1, cliente.getNome()); stmt.setString(2, cliente.getDocumento()); stmt.setDouble(3, cliente.getSaldo()); stmt.setString(4, cliente.getAtivo().name()); stmt.setInt(5, cliente.getId()); stmt.execute(); } } 5. Crie um formulário HTML que possibilite ao usuário informar os dados do Cliente, conforme representação no diagrama de classes <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Cadastro de Clientes</title> </head> <body> <form action="ClienteServlet" method="get"> <label>Nome:</label> <input type="text" name="nome" id="nome"/><br> <label>Documento:</label> <input type="text" name="documento" id="documento"/><br> <label>Saldo:</label> <input type="text" nama="saldo" id="saldo"/><br> <label>Ativo?:</label> <select name="ativo" id="ativo"> <option value="S">Sim</option> <option value="N">Não</option> </select> <br> <input type="submit" value="Gravar dados"/> </form> </body> </html> 6. Crie um servlet que possibilite a inserção dos dados do formulário na tabela do banco de dados. package br.ueg.posse.servlet; import java.io.IOException; import java.sql.SQLException; import import import import import javax.servlet.ServletException; javax.servlet.annotation.WebServlet; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import br.ueg.posse.dao.ClienteDAO; import br.ueg.posse.modelo.Ativo; import br.ueg.posse.modelo.Cliente; @WebServlet("/ClienteServlet") public class ClienteServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nome = request.getParameter("nome"); String documento = request.getParameter("documento"); String saldo = request.getParameter("saldo"); String ativo = request.getParameter("ativo"); Cliente cliente = new Cliente(); cliente.setNome(nome); cliente.setDocumento(documento); cliente.setSaldo(Double.parseDouble(saldo)); if (ativo.equals("S")){ cliente.setAtivo(Ativo.valueOf("S")); }else{ cliente.setAtivo(Ativo.valueOf("N")); } try { ClienteDAO dao = new ClienteDAO(); dao.incluir(cliente); } catch (SQLException e) { System.out.println("Erro ao inserir o registro no banco de dados: "+e.getMessage()); e.printStackTrace(); } } }