java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1) (RESOLVIDO)

Então @Lucas_Camara , fiz o debug, e encontrei o seguinte

o valor do stm está desta forma:

valor stm

e o valor do ccm(Cadastro Cliente Modelo) está desta forma:

ccm

Parece que o problema é nesse CadastroClienteModelo mesmo. O que seria essa classe? Como ela é criada?

Pelo menos o DAO está correto agora.

1 curtida
package br.com.fjsistemas.controle;

import br.com.fjsistemas.dao.CadastroClienteDAO;
import br.com.fjsistemas.interfaces.InterfaceControle;
import br.com.fjsistemas.modelo.CadastroClienteModelo;

public class CadastroClienteControle implements InterfaceControle {
	
	CadastroClienteModelo ccm = new CadastroClienteModelo();
	CadastroClienteDAO ccd = new CadastroClienteDAO();

	@Override
	public void salvarControle(Object... valor) {
		
		if("".equals(valor[0])) {
			ccm.setId((int) 0);
		}else {
			ccm.setId((int) valor[0]);
		}
		
		ccm.setTxtClienteNome((String) valor[1]);
		ccm.setComboBoxClienteSexo((String) valor[2]);
		ccm.setFormatterTxtDataNascimento((String) valor[3]);
		ccm.setTxtFormatterClienteCPF((String) valor[4]);
		ccm.setTxtFormatterClienteRG((String) valor[5]);
		ccm.setTxtClienteEndereco((String) valor[6]);
		ccm.setTxtClienteNumero((String) valor[7]);
		ccm.setTxtClienteBairro((String) valor[8]);
		ccm.setTxtFormatterClienteCEP((String) valor[9]);
		ccm.setTxtClienteCidade((String) valor[10]);
		ccm.setComboBoxClienteEstado((String) valor[11]);
		ccm.setTxtFormatterTelefone((String) valor[12]);
		ccm.setTxtFormatterClienteCelular((String) valor[13]);
		ccm.setTxtClienteEmail((String) valor[14]);
		
		ccd.salvarDAO(ccm);
		
	}

	@Override
	public void excluirControle(int id) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void carregarComboBox() {
		// TODO Auto-generated method stub
		
	}

}

@Lucas_Camara a classe controle apenas recebe as informações da classe visão e repassa as informações para as classes modelo e dao

E a ordem dos itens recebidos por esse varargs (Object... valor) está correta com a ordem dos sets?

1 curtida

Confesso pra vc que não sei ver isto…

É soh rodar em debug e inspecionar o parâmetro valor, que é o array com os valores.

1 curtida

@Lucas_Camara

Pelo que vejo, claramente os valores estão errados, o que não entendo é…pq eles estão errados se foram declarados na mesma ordem? Pq o nome está correto e somente os demais campos não estão?

Se vc imprimir no console o valor de valor[1], o que aparece?

1 curtida

@Lucas_Camara aparece o nome

o nome é o unico correto

Imaginei.

Então vc deve corrigir os sets de acordo com a ordem dos valores vindos do parâmetro valor. Porém, devo avisá-lo que é muito perigoso vc ficar passando parâmetros dessa forma. Usar Object é muito perigoso e pode causar erros inesperados no sistema. O melhor seria se vc já recuperasse os dados usando o tipo correto.

1 curtida

Pode me ensinar como fazer isto?

Simples. Se o valor 0 do parâmetro for o nome, vc faz:

ccm.setTxtClienteNome((String) valor[0]);

Se o nome for o valor 3, o set vai ficar assim:

ccm.setTxtClienteNome((String) valor[3]);
1 curtida

blz @Lucas_Camara vou fazer isso…muito obg por sua ajuda até aqui!!!