[RESOLVIDO]update

6 respostas
Lilian_Rodrigues

Pessoal estou com o seguinte problema

Grave: Servlet.service() for servlet [br.com.OdontoEstetica.jdbc.Servlet.ServletAtualizaConsulta] in context with path [/OdontoEstetica] threw exception
java.lang.RuntimeException: java.sql.SQLException: Parameter index out of range (12 > number of parameters, which is 11).
	at br.com.OdontoEstetica.jdbc.DAO.ConsultasDAO.altera(ConsultasDAO.java:82)
	at br.com.OdontoEstetica.jdbc.Servlet.ServletAtualizaConsulta.service(ServletAtualizaConsulta.java:108)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: Parameter index out of range (12 > number of parameters, which is 11).
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
	at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3729)
	at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3713)
	at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3755)
	at com.mysql.jdbc.PreparedStatement.setBoolean(PreparedStatement.java:3272)
	at br.com.OdontoEstetica.jdbc.DAO.ConsultasDAO.altera(ConsultasDAO.java:76)
	... 18 more

Alguem pode me ajudar?


codigo java

package br.com.OdontoEstetica.jdbc.DAO;

/**
 * @author Lilian
 *
 */

import java.sql.Connection;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.com.OdontoEstetica.jdbc.ConnectionFactory;
import br.com.OdontoEstetica.jdbc.modelo.Consultas;


public class ConsultasDAO {
private Connection connection;
	
	public ConsultasDAO(){
		this.connection = new ConnectionFactory().getConnection();
	}
	
	public void adiciona(Consultas consultas){
		
		String sql = "insert into agenda_consulta(codPaciente, nomePaciente, rg, cpf, datanascimento, endereco, telefone, nomeFuncionario, servico, dataHoraConsulta, preco, status) values(?, ?, ?, ?, ? , ?, ?, ?, ?, ?, ?, ?) ";

		try{
			
			// PreparedStatement para inserção
			PreparedStatement stmt = connection.prepareStatement(sql);
			
			//seta os valores
			
			stmt.setInt(1, consultas.getCodPaciente());
			stmt.setString(2, consultas.getNomePaciente());
			stmt.setString(3,consultas.getRG());
			stmt.setString(4,consultas.getCPF());
			stmt.setDate(5,(java.sql.Date) new Date(consultas.getDataNascimento().getTimeInMillis()));
			stmt.setString(6,consultas.getEnderecoPaciente());
			stmt.setLong(7,consultas.getTelefonePaciente());
			stmt.setString(8,consultas.getNomeFuncionario());
			stmt.setDate(9, (java.sql.Date) new Date(consultas.getDataHoraConsulta().getTimeInMillis()));
			stmt.setString(10, consultas.getServico());			
			stmt.setDouble(11, consultas.getValorConsulta());
			stmt.setBoolean(12,consultas.isStatus());
			
			
			//executa
			stmt.execute();
			stmt.close();
		}catch (SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	public void altera (Consultas consultas){
		
		String sql = "update agenda_consulta set codPaciente= ?, nomePaciente= ?, rg= ?, cpf= ?, datanascimento= ?, endereco= ?, telefone= ?, nomeFuncionario= ?, servico= ?, dataHoraConsulta= ?, preco= ?, status ";
		
		try{
			PreparedStatement stmt = connection.prepareStatement(sql);
			
			stmt.setInt(1, consultas.getCodPaciente());
			stmt.setString(2, consultas.getNomePaciente());
			stmt.setString(3,consultas.getRG());
			stmt.setString(4,consultas.getCPF());
			stmt.setDate(5,(java.sql.Date) new Date(consultas.getDataNascimento().getTimeInMillis()));
			stmt.setString(6,consultas.getEnderecoPaciente());
			stmt.setLong(7,consultas.getTelefonePaciente());
			stmt.setString(8,consultas.getNomeFuncionario());
			stmt.setDate(9, (java.sql.Date) new Date(consultas.getDataHoraConsulta().getTimeInMillis()));
			stmt.setString(10, consultas.getServico());			
			stmt.setDouble(11, consultas.getValorConsulta());
			stmt.setBoolean(12,consultas.isStatus());
			stmt.setInt(13, consultas.getCodConsulta());
			
			stmt.execute();
			stmt.close();
		}catch (SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	public void remove(Consultas consultas){
		
		try{
			
			PreparedStatement stmt = connection.prepareStatement("delete from agenda_consulta where codConsulta= ?");
			stmt.setInt(1,consultas.getCodConsulta());
			stmt.execute();
			stmt.close();
		}catch (SQLException e){
			throw new RuntimeException(e);
		}
			
		}	
	
}
package br.com.OdontoEstetica.jdbc.Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.OdontoEstetica.jdbc.DAO.ConsultasDAO;
import br.com.OdontoEstetica.jdbc.modelo.Consultas;

/**
 * Servlet implementation class ServletAtualizaConsulta
 */
@WebServlet("/ServletAtualizaConsulta")
public class ServletAtualizaConsulta extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -3100959352816397574L;

	

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		super.doPost(request, response);
	}

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		PrintWriter out = response.getWriter();

		// pegando os parametros do request
		int codConsulta = Integer.parseInt(request.getParameter("codConsulta"));
		int codPaciente = Integer.parseInt(request.getParameter("codPaciente"));
		String nomePaciente = request.getParameter("nomePaciente");
		String rg = request.getParameter("rg");
		String cpf = request.getParameter("cpf");
		String dataNascimentoEmTexto = request.getParameter("dataNascimento");
		String endereco = request.getParameter("endereco");
		Long telefone = Long.parseLong(request.getParameter("telefone"));
		String nomeFuncionario = request.getParameter("nomeFuncionario");
		String servico = request.getParameter("servico");
		String dataHoraConsultaEmTexto = request
				.getParameter("dataHoraConsulta");
		Double valorConsulta = Double.parseDouble(request
				.getParameter("valorConsulta"));
		boolean status = Boolean.parseBoolean(request.getParameter("status"));
		Calendar dataNascimento = null;
		Calendar dataHoraConsulta = null;

		// conversão de data de nascimento do paciente
		try {
			Date datanasc = (Date) new SimpleDateFormat("dd/MM/yyyy")
					.parse(dataNascimentoEmTexto);
			dataNascimento = Calendar.getInstance();
			dataNascimento.setTime(datanasc);
		} catch (ParseException e) {
			out.println("Erro ao converter data de nascimento do paciente");
			return;
		}
		// conversão de data de consulta
		try {
			Date dataHConsulta = (Date) new SimpleDateFormat("dd/MM/yyyy")
					.parse(dataHoraConsultaEmTexto);
			dataHoraConsulta = Calendar.getInstance();
			dataHoraConsulta.setTime(dataHConsulta);
		} catch (ParseException e) {
			out.println("Erro ao converter data de consulta");
		}

		// monta um objeto consultas
		Consultas consultas = new Consultas();
		consultas.setCodConsulta(codConsulta);
		consultas.setCodPaciente(codPaciente);
		consultas.setNomePaciente(nomePaciente);
		consultas.setRG(rg);
		consultas.setCPF(cpf);
		consultas.setDataNascimento(dataNascimento);
		consultas.setEnderecoPaciente(endereco);
		consultas.setTelefonePaciente(telefone);
		consultas.setNomeFuncionario(nomeFuncionario);
		consultas.setServico(servico);
		consultas.setDataHoraConsulta(dataHoraConsulta);
		consultas.setValorConsulta(valorConsulta);
		consultas.setStatus(status);

		// salva a consulta
		ConsultasDAO dao = new ConsultasDAO();
		dao.altera(consultas);

		RequestDispatcher rd = request.getRequestDispatcher("/Alterado.jsp");
		rd.forward(request, response);
	}
	
}

6 Respostas

darklordkamui

ta errado sua query… para vc atualizar um cadastro vc precisa saber qual é ele… certo???

entao vc vai ter que ter o id da consulta…

com esse id vc vai fazer o seguinte…

update agenda_consulta set codpaciente = ?, nomePaciente= ?, rg= ?, cpf= ?, datanascimento= ?, endereco= ?, telefone= ?, nomeFuncionario= ?, servico= ?, dataHoraConsulta= ?, preco= ?, status where codAgenda_consulta = ?";

mais ou menos isso… nao testei a query para ver se ta certa…

Lilian_Rodrigues

darklordkamui:
ta errado sua query… para vc atualizar um cadastro vc precisa saber qual é ele… certo???

entao vc vai ter que ter o id da consulta…

com esse id vc vai fazer o seguinte…

update agenda_consulta set codpaciente = ?, nomePaciente= ?, rg= ?, cpf= ?, datanascimento= ?, endereco= ?, telefone= ?, nomeFuncionario= ?, servico= ?, dataHoraConsulta= ?, preco= ?, status where codAgenda_consulta = ?";

mais ou menos isso… nao testei a query para ver se ta certa…

eu fiz a mudança mas o erro continua.

Lilian_Rodrigues

ficou assim:

String sql = "update agenda_consulta set codPaciente= ?, nomePaciente= ?, rg= ?, cpf= ?, datanascimento= ?, endereco= ?, telefone= ?, nomeFuncionario= ?, servico= ?, dataHoraConsulta= ?, preco= ?, status=? where  codConsulta = ? ";
darklordkamui

funcionou com essa query que postou por ultimo??

a query que postei so foi para vc ver a clausula where codigo = ?
por isso tava errado o que postei …

Lilian_Rodrigues

darklordkamui:
funcionou com essa query que postou por ultimo??

a query que postei so foi para vc ver a clausula where codigo = ?
por isso tava errado o que postei …

Não funcionou :cry:

Lilian_Rodrigues

Depois reiniciei o Tomcat funcionou.

Criado 16 de junho de 2012
Ultima resposta 16 de jun. de 2012
Respostas 6
Participantes 2