Instituto Federal de Santa Catarina - Campus Chapecó Engenharia de Controle e Automação Programação II Professor: Bruno Crestani Calegaro Atividade JSP com Banco de Dados Objetivos Elaborar um projeto de software para um sistema de biblioteca. O protótipo será capaz de cadastrar livros e removê-los como ilustrado abaixo. Material necessário Para a elaboração da atividade será necessário utilizar os arquivos: • cadastro.sql • estilo.css • DAO.java • MySql Connector Configurando TomCat e MySql Para fazer a conexão com o banco de dados a aplicação precisa fazer o uso dos drivers MySql, com o TomCat basta copiar o arquivo “.jar” do driver para a pasta TomCat/lib. Isso fará que qualquer aplicação futuro posso compartilhar essa mesma biblioteca. Configurando Banco de Dados para a Biblioteca O Banco de Dados para a biblioteca já encontra-se construído, basta importar nas opções do Xampp o arquivo “cadastro.sql”. O banco tem o nome de “biblioteca” e possui uma tabela chamada Livro com os campos: Completando o arquivo DAO Antes de começar as páginas web precisamos configurar o arquivo de acesso ao banco de dados. Faremos três funções a de cadastrar, remover e buscar os dados dos livros. O código para cadastrar livros deve receber os dados do autor, titulo, ano e editora enviando para o banco de dados: //Funcao para cadastro um livro no banco de dados public static void Cadastrar(String autor, String titulo, String ano, String editora) { try { String insert = "INSERT INTO livros(autor, titulo, ano, editora)" + "VALUES (?, ?, ?, ?)"; Class.forName("com.mysql.jdbc.Driver"); Connection conexao = DriverManager.getConnection(DB_URL + DB_NAME,DB_USER, DB_PASSWD); PreparedStatement ps = conexao.prepareStatement(insert); ps.setString(1, autor); ps.setString(2, titulo); ps.setString(3, ano); ps.setString(4, editora); ps.executeUpdate(); conexao.close(); } catch (Exception ex) { ex.printStackTrace(); } } Para remover é preciso apenas saber qual o COD_LIVRO e utilizarmos a função: //Função para remover um registro public static void Remover(String id) { try { String delete = "DELETE from livros WHERE COD_LIVRO = ?"; Class.forName("com.mysql.jdbc.Driver"); Connection conexao = DriverManager.getConnection(DB_URL + DB_NAME, DB_USER, DB_PASSWD); PreparedStatement ps = conexao.prepareStatement(delete); ps.setString(1, id); ps.executeUpdate(); conexao.close(); } catch (Exception ex) { ex.printStackTrace(); } } Por fim, a função que busca os dados de todos os livros deve retornar uma lista com tais informações. Nesse caso, podemos utilizar ArrayList e um objeto de modelo chamado Livro. Esse objeto deve conter todos os campos da tabela livros, bem como os métodos get, set e construtor. Assim, uma função que retorna a lista de livros seria: //Função para retornar uma listagem dos livros cadastrados public static ArrayList<Livro> getLivros() { ArrayList<Livro> lista = new ArrayList<Livro>(); try { Class.forName("com.mysql.jdbc.Driver"); Connection conexao = DriverManager.getConnection(DB_URL + DB_NAME, DB_USER, DB_PASSWD); Statement stmt = conexao.createStatement(); ResultSet result = stmt.executeQuery("SELECT * FROM livros"); while (result.next()) { int codigo = result.getInt("cod_livro"); String autor = result.getString("autor"); String titulo = result.getString("titulo"); int ano = result.getInt("ano"); String editora = result.getString("editora"); Livro novo = new Livro(codigo, autor, titulo, ano, editora); lista.add(novo); } conexao.close(); } catch (Exception ex) { ex.printStackTrace(); } return lista; } Construindo JSP Para completar a atividade serão preparadas duas páginas JSP: index.jsp e del.jsp. Para embelezar as páginas vamos utilizar o arquivo estilo.css que contém a configuração de tabelas e menu de abas para a construção do site. Na página index será construído um formulário para cadastrar um livro segundo autor, titulo, ano e editora. <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="app.DAO"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP com Banco de Dados</title> <link rel="stylesheet" href="estilo.css" type="text/css"> </head> <body> <br> <div class="navegador"> <a id="currenttab" href="index.jsp">Adicionar</a> <a href="del.jsp">Remover</a> <br> <br> <br> <form action="" method="post"> <table> <tr> <td>Autor</td> <td><input type="text" name="autor"></td> </tr> <tr> <td>Título</td> <td><input type="text" name="titulo"></td> </tr> <tr> <td>Ano</td> <td> <input type="text" name="ano"></td> </tr> <tr> <td>Editora</td> <td> <input type="text" name="editora"></td> </tr> </table> <br> <input type="submit" value="Cadastrar"> </form> </body> </html> Uma ação para este formulário deve acessar o conteúdo dos campos e solicitar o cadastro ao banco de dados. Logo, devemos ler os dados de um “request” e utilizar os métodos da classe DAO para se comunicar com o banco. String autor = request.getParameter("autor"); String titulo = request.getParameter("titulo"); String ano = request.getParameter("ano"); String editora = request.getParameter("editora"); DAO.Cadastrar(autor, titulo, ano, editora); Na página del.jsp vamos fazer uma listagem de todos os livros do banco colocando os dados em uma tabela do site. Ademais, criamos uma caixa de marcação para selecionar quais livros desejamos deletar. <%@page <%@page <%@page <%@page import="app.Livro"%> import="app.DAO"%> contentType="text/html" pageEncoding="UTF-8"%> import="java.util.*"%> <html> <head> <title>JSP com Banco de Dados</title> <link rel="stylesheet" href="estilo.css" type="text/css"> </head> <body> <div class="navegador"> <a href="index.jsp">Adicionar</a> <a id="currenttab" href="del.jsp">Remover</a> </div> <br> <br> <br> <form action="" method="post"> <table> <tr> <th>Autor</th> <th>Título</th> <th>Ano</th> <th>Editora</th> </tr> <% ArrayList<Livro> lista = DAO.getLivros(); //Para cada livro for(Livro l : lista){ //Escreve os dados na tabela out.print("<tr>"); out.print("<td>"); out.print(l.getAutor()); out.print("</td>"); out.print("<td>"); out.print(l.getTitulo()); out.print("</td>"); out.print("<td>"); out.print(l.getAno()); out.print("</td>"); out.print("<td>"); out.print(l.getEditora()); out.print("</td>"); out.print("<td>"); //Cria um metodo de entrada, estilo checkbox, que salva o COD_LIVRO no nome do parametro, c + "codigo" out.print("<input name=c" + l.getCodigo() + " type='checkbox'>"); out.print("</td>"); out.print("</tr>"); } %> </table> <br> <input type="submit" value="Remover do cadastro"> </form> </body> </html> Uma ação para este formulário deve ler todos os campos marcados e para o respectivo código do livro para o DAO remover: //Le todos os livros selecionados Enumeration names = request.getParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); StringBuffer sb = new StringBuffer(name); //Apaga a primeira letra restando apenas o valor do código sb.deleteCharAt(0); DAO.Remover(sb.toString()); }