Consulta mysql

17 respostas
B

Tenho um banco de dados com alguns campos com dados de clientes como nome, telefone, endereço…e eu estava querendo fazer uma consulta pelo código do cliente pra jogar esses dados numa página jsp depois que digitar esse código num formulário html, porém esta dando erro no Servlet na linha 17…

SERVLET

package controller;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import model.*;

public class ConsultaClienteServlet extends HttpServlet {
	public void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		boolean result = false;
		String codigo_cli = req.getParameter("codigo_cli");
		Cliente e = new Cliente();
		e.setCodigo_cli(Integer.parseInt(codigo_cli));
		try {
			DAO dao = new ClienteDAO();
			result = dao.consultaCliente(e);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		HttpSession sessao = req.getSession();
		sessao.setAttribute("consulta", e);
		RequestDispatcher rd =
			req.getRequestDispatcher("ConfirmaCadastro.jsp");
		rd.forward(req, resp);
	}
}

DAO

package model;
import java.sql.*;

public class ClienteDAO {
	private ConnectionFactory fabrica;

	public ClienteDAO() throws ClassNotFoundException {
		fabrica = new ConnectionFactory();
	}

	public boolean insereCliente( Cliente c) throws SQLException {
		Connection con = fabrica.abreConexao();
		String sql = "Insert into cliente (nome, fone, cpf, rg, endereco, email, dt_nasc)" +
			"values(?, ?, ?, ?, ?, ?, ?)";
		PreparedStatement pst = con.prepareStatement(sql);
		pst.setString(1, c.getNome());
		pst.setString(2, c.getFone());
		pst.setString(3, c.getCpf());
		pst.setString(4, c.getRg());
		pst.setString(5, c.getEndereco());
		pst.setString(6, c.getEmail());
		pst.setString(7, c.getDt_nasc());
		int resp = pst.executeUpdate();
		pst.close();
		con.close();
		return resp == 1 ? true : false;
	}
	public boolean excluirCliente (Cliente e) throws SQLException {
		Connection con = fabrica.abreConexao();
		String sql = "Delete from cliente where codigo_cli=?";
		PreparedStatement pst = con.prepareStatement(sql);
		pst.setInt(1, e.getCodigo_cli());
		int resp = pst.executeUpdate();
		pst.close();
		con.close();
		return resp == 1 ? true : false;
	}
	public Cliente umCliente(String email) throws SQLException {
		Cliente c = null;
		Connection con = fabrica.abreConexao();
		String sql = "Select * from cliente where email = ?";
		PreparedStatement pst = con.prepareStatement(sql);
		pst.setString(1, email);
		ResultSet rs = pst.executeQuery();
		if (rs.next()) {
			c = new Cliente();
			c.setCodigo_cli(rs.getInt("codigo_cli"));
			c.setNome(rs.getString("nome"));
			c.setFone(rs.getString("fone"));
			c.setEmail(rs.getString("email"));
			c.setCpf(rs.getString("cpf"));
			c.setRg(rs.getString("rg"));
			c.setEndereco(rs.getString("endereco"));
			c.setDt_nasc(rs.getString("dt_nasc"));
		}
		rs.close();
		pst.close();
		con.close();
		return c;
	}
	public Cliente consultaCliente (int codigo_cli) throws SQLException {
		Connection con = fabrica.abreConexao();
		String sql = "Select * from cliente where codigo_cli=?";
		PreparedStatement pst = con.prepareStatement(sql);
		pst.setInt(1, codigo_cli);
		ResultSet rs = pst.executeQuery();
		Cliente e = null;
		if (rs.next()){
			e = new Cliente();
			e.setCodigo_cli(rs.getInt("codigo_cli"));
			e.setNome(rs.getString("nome"));
			e.setCpf(rs.getString("cpf"));
			e.setDt_nasc(rs.getString("dt_nasc"));
			e.setEndereco(rs.getString("endereco"));
			e.setEmail(rs.getString("email"));
			e.setRg(rs.getString("rg"));
			e.setFone(rs.getString("fone"));
		}
		return e;
	}
}

Queria a ajuda de vocês pra solucionar esse erro…só falta isso pra eu completar o CRUD…

17 Respostas

R

tem como vc mostra o stacktrace do erro?

B

java.lang.Error: Unresolved compilation problem:
The method consultaCliente(int) in the type ClienteDAO is not applicable for the arguments (Cliente)

controller.ConsultaClienteServlet.service(ConsultaClienteServlet.java:17)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
drsmachado

Você está passando o cliente todo, não apenas o código dele, como o método requer.
coloque e.getCod();

B

Agora ficou assim:

java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Cliente to boolean

controller.ConsultaClienteServlet.service(ConsultaClienteServlet.java:17)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
drsmachado

O retorno do método é um objeto Cliente e a variável que o recebe é boolean.
Ou você altera a assinatura e o retorno do método ou altera a variável que o recebe.

B

Não consegui cara…eu vou trocando e cada vez é um erro novo…

drsmachado

Qual o erro?

henrriquetec

Correção que devem ser feitas para funcionar:

  1. passagem do parametro, vc esta enviando um objeto como parametro para o metodo, e ele esta esperando um int
result = dao.consultaCliente(e)

faz assim

result = dao.consultaCliente(e.getCodigo_cli)
  1. O retorno do metodo esta devolvendo um objeto tipo Cliente e vc esta tentando atribuir a um tipo boolean
boolean result = false; 

result = dao.consultaCliente(e)

faz assim

Cliente novoCliente = dao.consultaCliente(e.getCodigo_cli)

Abraços

B

Muito obrigado cara deu certo..porem não consegui o que queria rsrsr

ClienteDAO
public Cliente consultaCliente (int codigo_cli) throws SQLException {
		Connection con = fabrica.abreConexao();
		String sql = "Select * from cliente where codigo_cli=?";
		PreparedStatement pst = con.prepareStatement(sql);
		pst.setInt(1, codigo_cli);
		ResultSet rs = pst.executeQuery();
		Cliente e = null;
		if (rs.next()){
			e = new Cliente();
			e.setCodigo_cli(rs.getInt("codigo_cli"));
			e.setNome(rs.getString("nome"));
			e.setCpf(rs.getString("cpf"));
			e.setDt_nasc(rs.getString("dt_nasc"));
			e.setEndereco(rs.getString("endereco"));
			e.setEmail(rs.getString("email"));
			e.setRg(rs.getString("rg"));
			e.setFone(rs.getString("fone"));
		}
		return e;
	}
ConsultaClienteServlet
package controller;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import model.*;

public class ConsultaClienteServlet extends HttpServlet {
	public void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		boolean result = false;
		String codigo_cli = req.getParameter("codigo_cli");
		Cliente e = new Cliente();
		e.setCodigo_cli(Integer.parseInt(codigo_cli));
		try {
			ClienteDAO dao = new ClienteDAO();
			Cliente novoCliente = dao.consultaCliente(e.getCodigo_cli());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		HttpSession sessao = req.getSession();
		sessao.setAttribute("consulta", e);
		RequestDispatcher rd =
			req.getRequestDispatcher("ConsultaCliente.jsp");
		rd.forward(req, resp);
		
 	}
}
ConsultaCliente.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action= "consultacliente" method="get">
			<p>Código do cliente<input type="text" name="codigo_cli"></p>
			<p> <input type="submit" value="Inserir"></p>
			<p> <input type="reset" value="limpar"></input></p>
		</form>
</body>
</html>
ConsultaCliente.jsp
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<jsp:useBean id="cliente" class="model.Cliente" scope="session">
    <jsp:setProperty name="cliente" property="*"/>
</jsp:useBean>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
		<title>Consulta de cliente</title>
	</head>
	<body>
		<h1>Dados do cliente</h1>
		<h1><%=cliente.getNome()%> </h1>
		<h1><%=cliente.getFone()%> </h1>
		<h1><%=cliente.getEmail()%> </h1>
	</body>
</html>

Quando eu digito o codigo do cliente e aciono a .jsp todos valores retornam um null...

henrriquetec

Ola,

Correções que devem ser feitas:

sessao.setAttribute("consulta", e);

substituir por

sessao.setAttribute("cliente", e);
  1. Alterar a jsp
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>  
<jsp:useBean id="cliente" class="model.Cliente" scope="session">  
    <jsp:setProperty name="cliente" property="*"/>  
</jsp:useBean>  
  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>  
        <title>Consulta de cliente</title>  
    </head>  
    <body>  
        <h1>Dados do cliente</h1>  
        <h1><%=cliente.getNome()%> </h1>  
        <h1><%=cliente.getFone()%> </h1>  
        <h1><%=cliente.getEmail()%> </h1>  
    </body>  
</html>

por

<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>  
<jsp:useBean id="cliente" class="model.Cliente" scope="session">  
</jsp:useBean>  
  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>  
        <title>Consulta de cliente</title>  
    </head>  
    <body>  
        <h1>Dados do cliente</h1>  

        <jsp:getProperty name="cliente" property="nome" />
        <jsp:getProperty name="cliente" property="fone" />
        <jsp:getProperty name="cliente" property="email" />

    </body>  
</html>

Abraços

B

Valeu cara…fiz assim mas continuou retornando null…

henrriquetec

posta o seu código de como ficou!!!

R

troca isto aqui

ConsultaClienteServlet

package controller;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import model.*;

public class ConsultaClienteServlet extends HttpServlet {
	public void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		boolean result = false;
		String codigo_cli = req.getParameter("codigo_cli");
		Cliente e = new Cliente();
		e.setCodigo_cli(Integer.parseInt(codigo_cli));
		try {
			ClienteDAO dao = new ClienteDAO();
			Cliente novoCliente = dao.consultaCliente(e.getCodigo_cli());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		HttpSession sessao = req.getSession();
		sessao.setAttribute("consulta", e); // <-- troca isto aqui, vc esta colocando o cliente que só tem o codigo e não o que vc consultou
		RequestDispatcher rd =
			req.getRequestDispatcher("ConsultaCliente.jsp");
		rd.forward(req, resp);
		
 	}
}

por isto aqui

ConsultaClienteServlet

package controller;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import model.*;

public class ConsultaClienteServlet extends HttpServlet {
	public void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		boolean result = false;
		String codigo_cli = req.getParameter("codigo_cli");
		Cliente e = new Cliente();
		e.setCodigo_cli(Integer.parseInt(codigo_cli));
		try {
			ClienteDAO dao = new ClienteDAO();
			Cliente novoCliente = dao.consultaCliente(e.getCodigo_cli());
                        
                HttpSession sessao = req.getSession();
		
                //sessao.setAttribute("consulta", e); // <-- troca isto aqui, coloca o novoCliente e seta o atributo com o nome cliente
                sessao.setAttribute("cliente", novoCliente );
		RequestDispatcher rd =
			req.getRequestDispatcher("ConsultaCliente.jsp");
		rd.forward(req, resp);



		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		
 	}
}

testa isto ai que agora vai… rs

henrriquetec

não me atentei a esse detalhe rsrs… agora funciona!!!

B
package controller;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import model.*;

public class ConsultaClienteServlet extends HttpServlet {
	public void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		boolean result = false;
		String codigo_cli = req.getParameter("codigo_cli");
		Cliente e = new Cliente();
		e.setCodigo_cli(Integer.parseInt(codigo_cli));
		try {
			ClienteDAO dao = new ClienteDAO();
			Cliente novoCliente = dao.consultaCliente(e.getCodigo_cli());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		HttpSession sessao = req.getSession();;
		sessao.setAttribute("cliente", novoCliente);
		RequestDispatcher rd =
			req.getRequestDispatcher("ConsultaCliente.jsp");
		rd.forward(req, resp);
		
 	}
}

novoCliente cannot be solved..ta dificil kkk

henrriquetec

Ola,

faça assim

package controller;  
  
import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
import model.*;  
  
public class ConsultaClienteServlet extends HttpServlet {  
    public void service(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        boolean result = false;  
        String codigo_cli = req.getParameter("codigo_cli");  
        Cliente e = new Cliente();  
        e.setCodigo_cli(Integer.parseInt(codigo_cli));  
        Cliente novoCliente;
        try {  
            ClienteDAO dao = new ClienteDAO();  
            novoCliente = dao.consultaCliente(e.getCodigo_cli());  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        HttpSession sessao = req.getSession();;  
        sessao.setAttribute("cliente", novoCliente);  
        RequestDispatcher rd =  
            req.getRequestDispatcher("ConsultaCliente.jsp");  
        rd.forward(req, resp);  
          
    }  
}

ou assim

package controller;  
  
import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
import model.*;  
  
public class ConsultaClienteServlet extends HttpServlet {  
    public void service(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        boolean result = false;  
        String codigo_cli = req.getParameter("codigo_cli");  
        Cliente e = new Cliente();  
        e.setCodigo_cli(Integer.parseInt(codigo_cli));  
        try {  
            ClienteDAO dao = new ClienteDAO();  
            Cliente novoCliente = dao.consultaCliente(e.getCodigo_cli());  
            HttpSession sessao = req.getSession();
            sessao.setAttribute("cliente", novoCliente);  
            RequestDispatcher rd =  
            req.getRequestDispatcher("ConsultaCliente.jsp");  
            rd.forward(req, resp);  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        
          
    }  
}

Abraços

B

Ae galera obrigado pela ajuda de todos ae..pena que nhuma das soluções apresentadas por voces deram certo..mas mesmo assim fica o meu agradecimento aqui aos que tentaram me ajudar..

Eu consegui fazer..vou postar o codigo pra voces verem..
package controller;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import model.*;

public class ConsultaClienteServlet extends HttpServlet {
	public void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		boolean result = false;
		String codigo_cli = req.getParameter("codigo_cli");
		Cliente cli = new Cliente();
		int cod = Integer.parseInt(codigo_cli);
		try {
			ClienteDAO dao = new ClienteDAO();
			cli = dao.consultaCliente(cod);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		HttpSession sessao = req.getSession();
		sessao.setAttribute("cliente", cli);
		RequestDispatcher rd =
			req.getRequestDispatcher("ConsultaCliente.jsp");
		rd.forward(req, resp);
		
 	}
}
Criado 12 de novembro de 2010
Ultima resposta 18 de nov. de 2010
Respostas 17
Participantes 4