Persistência – Java para Web com MySQL
1. Criar o modelo no DBDesigner
2. Criar o esquema e as tabelas no MySQL
3. Criar um projeto Java simples, com o nome Empresa,no NetBeans
4. 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 java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import 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 java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import 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";
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 java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import 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.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; }
15.
Vamos testar o nosso método grava, para isso vamos criar uma classe de teste, chamada
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)
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(); }