Parameter index out of range(1> number of parameters, which is 0) AJUDEM ME

5 respostas
T

Olha eu to com o Erro ja depurei e vi q o problema é no meu DAO

public void inserir(PacienteBean paciente) throws SQLException {
        this.setConnection("sal");
        this.open();

        String sql = "INSERT INTO paciente "
                        + "(idPaciente,nome,cpf,rg,nomeMae,cartaoSus,telefone,celular,rua,"
                        + "complemento,numero,bairro,cidade,estado,sexo,data) "
                        + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
       
        System.out.println(sql+" - "+this.getCodigo());
        this.prepare(sql);
        
        int id = getCodigo();
        
        this.setInt(1, id); 
        this.setString(2, paciente.getNome());     
        this.setString(3, paciente.getCpfCnpj());
        this.setString(4, paciente.getRgie());
        this.setString(5, paciente.getNomeMae());
        this.setString(6, paciente.getCartaoSus());
        this.setString(7, paciente.getTelefone());
        this.setString(8, paciente.getCelular());
        this.setString(9, paciente.getRua());
        this.setString(10, paciente.getComplemento());
        this.setInt(11, paciente.getNumero());
        this.setString(12, paciente.getBairro());
        this.setString(13, paciente.getCidade());
        this.setString(14, paciente.getEstado());
        this.setString(15, paciente.getSexo());
        this.setDate(16, paciente.getData());

        this.execute();
        this.close();

    }

o Erro acontece na Linha on gera o id
o metodo q incrementa o Codigo é o getCodigo q eh esss

public int getCodigo() throws SQLException {
        //this.setConnection("sal");
        //this.open();

        String SQLi = "SELECT HIGH_PRIORITY IFNULL(MAX(idPaciente),0)+1 AS ID FROM paciente";
        this.prepare(SQLi);
        this.executeQuery();
        this.getRS().first();

        int novoId = this.getRS().getInt("ID");

        //this.close();

        return novoId;
    }

e o metodo de inserir da tela é esse

private void salvar() {
        if (this.verificarCampos()) {
            return;
        }
        try {
            if (this.isInserir()) {
               
                PacienteBean paciente = new PacienteBean();
                paciente.setNome(this.txNome.getText().trim().toUpperCase());
                paciente.setBairro(this.txBairro.getText().trim().toUpperCase());
                paciente.setCartaoSus(this.txNumeroSUS.getText().trim().toUpperCase());
                paciente.setCelular(this.txCelular.getText().trim().toUpperCase());
                paciente.setData(dtDataNascimento.getDate());
                paciente.setComplemento(this.txComplemento.getText().trim().toUpperCase());
                paciente.setCpfCnpj(this.txCpf.getText().trim().toUpperCase());
                paciente.setNumero(Integer.parseInt(this.txNumero.getText()));
                
                this.pacienteDao.inserir(pacienteBean);
                Msg.informacao(this, "Salvo com sucesso.");
                this.telaBusca.atualizarTabela();
                this.cancelar();
            } else {
                PacienteBean paciente = new PacienteBean();
                paciente.setIdPaciente(this.idPaciente);
                paciente.setNome(this.txNome.getText().trim().toUpperCase());
                this.pacienteDao.alterar(paciente);
                Msg.informacao(this, "Alterado Com Sucesso.");
                this.telaBusca.atualizarTabela();
                this.cancelar();
            }
        } catch (SQLException ex) {
           ex.printStackTrace();
            Msg.erro(this, "Erro ao salvar. \n" + ex.getMessage());
        }
    }
o erro acontece
this.pacienteDao.inserir(pacienteBean);

é a hora que ele manda pro DAO e o mesmo tem q gerar o codigo usando o metodo...

Me ajudem aew ... ja faz tempo que to tentando achar o erro...

obrigado desde Já

5 Respostas

Vingdel

Bom dia, tironinho!

Analisando o que você postou, o que me parece estar errado é o argumento que você passa para o método inserir().

Na linha 8 do método salvar() você declara e instancia o atributo com o nome “paciente” mas na linha 18 está passando para o método inserir o argumento “pacienteBean”. Veja se realmente é esse o problema.

Abraço!

T

É realmente eu estava passando o pacienteBean ao inves de paciente…

mais o erro naum está pois ja arrumei e continua dando o mesmo erro…

A

Experimente isso:

String SQLi = "SELECT ID FROM (SELECT HIGH_PRIORITY IFNULL(MAX(idPaciente),0)+1 AS ID FROM paciente)";
T

Olá

Por que não cria uma sequence, amigo?
É bem simples!

O sql para pegar o próximo valor da sequence é:

select nextval('NOME_SEQUENCE');

Caso não queira, experimente o código a seguir, como nosso amigo acima mostrou:

String SQLi = "SELECT ID FROM (SELECT HIGH_PRIORITY IFNULL(MAX(idPaciente),0)+1 AS ID FROM paciente)";

Abs!!

T

BLza Galera… Resolvi foi so pegar o getCodigo com uma variavel inteira e pegar antes do SQL…

Valeu a todos a ajuda…

Criado 10 de maio de 2012
Ultima resposta 10 de mai. de 2012
Respostas 5
Participantes 4