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());
}
Download

Atividade JSP com Banco de Dados