Cadastro simples com Bean

2 respostas
betonit

Gente estou com uma dúvida de iniciante... Gostaria de fazer um simples cadastro de usuarios na qual ainda estou fazendo apenas o metodo doInsert(), portanto os d+ metodos podem ter erros, mas neste doInsert() n consigo resolver...

Construi o seguinte bean:

package acesso;

import java.sql.*;
import java.util.*;

public class AcessoBean{
	private String nome;
	private int idade;
	private double salario;
	private int linhas;
	
	protected Connection con = null;
	protected Statement stm = null;
	protected ResultSet rs = null;
	
	public Collection doSelect(){
		Collection registros = null;
		getConexao();

		try {
			stm = con.createStatement();
			ResultSet rs = stm.executeQuery("SELECT * FROM CADASTRO WHERE LIKE '%"+nome+"%'");
			
			while(rs.next()) {
				nome = rs.getString("nome");
				idade = rs.getInt("idade");
				salario = rs.getDouble("salario");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
			
		return registros;
	}	

	public int doInsert(){
		linhas = 0;
		getConexao();
				
		try {
			stm = con.createStatement();
			linhas = stm.executeUpdate("INSERT INTO CADASTRO (nome,idade,salario) VALUES ('"+nome+"','"+idade+"','"+salario+"')");
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
		return linhas;
		
	}

	public int doDelete(){
		linhas = 0;
		getConexao();
		
		try {
			stm = con.createStatement();
			linhas = stm.executeUpdate("DELETE * FROM CADASTRO WHERE LIKE '%"+nome+"%'");
		} catch (Exception e) {
			e.printStackTrace();
		}

		return linhas;
	}

	public void getConexao(){
		try
		{	Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection
			("jdbc:mysql://localhost:3306/teste?user=root;");
		}
		catch (ClassNotFoundException cnfex) 
		{	System.out.println("Não carregou o Driver!");
			cnfex.printStackTrace();
		}
		catch (SQLException sqlex) 
		{	System.out.println("Não conectou ao banco!");
			sqlex.printStackTrace();
		}
	}
	
	public int getLinhas() {
			return linhas;
	}

	public String getNome() {
		return nome;
	}
	
	public int getIdade() {
		return idade;
	}

	public double getSalario() {
		return salario;
	}

	public void setNome(String nomeStr) {
		this.nome = nomeStr;
	}
		
	public void setIdade(int idade) {
		this.idade = idade;	
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

}

onde no jsp de insercao(inserir.jsp) colokei desta forma:

<jsp:useBean id="inserir" class="acesso.AcessoBean" scope="request">
	<jsp:setProperty name="inserir" property="*" />
</jsp:useBean>	

<jsp:useBean id="acesso" class="acesso.AcessoBean">
	<% acesso.doInsert();
	   out.println(acesso.doInsert());%>
</jsp:useBean>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Inserindo o Usuário</title>
</head>
<body bgcolor="#FFFFFF">

<html><body>

<h2> 
<jsp:useBean id="exibir" class="acesso.AcessoBean">
	<jsp:getProperty name="exibir" property="linhas" /><br>
	<jsp:getProperty name="exibir" property="nome" /><br>
	<jsp:getProperty name="exibir" property="idade" /><br>
	<jsp:getProperty name="exibir" property="salario" /><br>
</jsp:useBean>
</h2>

</body></html>

</body>
</html>

Passei no form como post e action="inserir.jsp" como descrevi acima. No entanto, qd executo ele, ele fika carregando e deixa ativa a janela ja q uso o tomcat manager para startar o tomcat. Sei q este Bean foge aos padroes mas foi o solicitado pelo meu professor. Obrigado a quem puder me ajudar ja que preciso ainda fazer o doSelect().

Obrigado,
Beto.

2 Respostas

Ironlynx
Use prepared statement

Vc nao fecha a conexão em lugar nenhum???

E isso eh um faz-de-tudo-bean!(separe o acesso)

Ai,ai,ai q confusãovc tah chamando getConexao() e logo depois vc faz um con.createStatement(); e nunca fecha ela em lugar algum! :?

Um st.close() cairia bem

Esse inserir.jsp não estará  recebendo dados?Vc tem q retornar algo para pág(os objetos inseridos)?

Seria melhor(o correto seria o isolamento total),carregar o driver no construtor,Class.forName(blah,blah,blah) e pegar a conex(con = DriverManager.getConnection)  eh :

st = conn.createStatement();

int i = st.executeUpdate(sua expressão);

se(i==-1)

System(Vazar)

e depois fechar (sempre)o statement:

st.close(); em cada método
betonit

Fala kra, obrigado pela resposta.

Já havia detectado a ausência do fechamento da conexao. Sei q essa bean não é a ideal, mas fiz da maneira q o professor me pediu q fizesse. Enfim, no lance da exibicao, vc acha legal q eu colocasse uma pagina exibir.jsp com todos os exibir da minha bean? Se fosse possivel, gostariam q me desse resposta com exemplos de como ficaria o code.

Obrigado,
Beto.

Criado 17 de setembro de 2004
Ultima resposta 18 de set. de 2004
Respostas 2
Participantes 2