Problemas com prepared statment

Beleza galara?

estou com um problema basico mas que não consigo resolver.

estou usando preparedstatment e tenho o seguinte erro:

Parameter index out of bounds. 8 is not between valid values of 1 and 7

O sql que fiz recebe 47 parametros, e quando uso o inspct do eclipse no objeto preparedstatment ele me mostra um parametro chamado parameterCount com o valor 7.
Não entendo isso, tenho que setar o limite de parametros do meu prepared statment?
Já usei preparedstatment com mais parametros e nunca tive problemas.
Agraço qualquer ajuda

Obrigado!

Você está setando mais parametros que você pode… Está dizendo que o índice 8 não está entre os valores de índices 1 e 7.

Coloque seu código que podemos te ajudar melhor…

Este é meu sql com os parametros

sql = new StringBuffer();
				    
		    sql.append("Update t018_pac_rh set ");
		    sql.append("EMPRESA = '?', ");
		    sql.append("FILIAL = '?', ");
		    sql.append("MATRICULA = ?, ");
		    sql.append("NOME = '?', ");
		    sql.append("DT_NASC= '?', ");
		    sql.append("NOME_CARGO = '?', ");		
		    sql.append("CCUSTO = '?' ,");
		    sql.append("EMAIL_PRODESP = '?', ");
		    sql.append("HORARIO_ENTRADA = '?', ");
		    sql.append("HORARIO_SAIDA = '?', ");
		    sql.append("DATA_ADMIS = STR_TO_DATE('?','%d%m%Y'), ");
		    sql.append("SALARIO = insert('?' ,length(?)-1,0,'.'), ");
		    sql.append("SEXO = '?' ,");
		    sql.append("DT_ULT_PROM = STR_TO_DATE('?','%d%m%Y'), ");
		    sql.append("COD_CARGO = ? , ");			    
		    sql.append("FERIAS_INICIO = STR_TO_DATE('?','%d%m%Y'), ");
		    sql.append("FERIAS_FIM = STR_TO_DATE('?','%d%m%Y') ");
			    
		    switch(Integer.parseInt(dadosFuncionario.get(46).toString().trim())) {
		    	case 2:
		    		sql.append(", LICENCA_INICIO = STR_TO_DATE('?','%d%m%Y') ");
		    		break;
		    	case 3:
		    		sql.append(", LICENCA_INICIO = STR_TO_DATE('?','%d%m%Y') ");
		    		break;			    	
		    	case 5:
		    		sql.append(", LICENCA_INICIO = STR_TO_DATE('?','%d%m%Y') ");
		    		break;
		    	case 6:
		    		sql.append(", AFASTAMENTO_INICIO = STR_TO_DATE('?','%d%m%Y') ");
		    		break;			         
		    	case 7:
		    		sql.append(", LICENCA_INICIO = STR_TO_DATE('?','%d%m%Y') ");
		    		break;			    	
		    	case 9:
		    		sql.append(", LICENCA_INICIO = STR_TO_DATE('?','%d%m%Y') ");
		    		break;			    	
		    	case 97:
		    		sql.append(", AFASTAMENTO_INICIO = STR_TO_DATE('?','%d%m%Y') ");
		    		break;
		    	default:
		    		sql.append(", LICENCA_INICIO = STR_TO_DATE('000000','%d%m%Y'), ");
		    		sql.append("AFASTAMENTO_INICIO = STR_TO_DATE('000000','%d%m%Y') ");
		    		break;
		    }
		    sql.append(", cod_cargo_sistema = ");
		    if(h != 0){
		    
			    sql.append("(select cod_cargo " +
				    		"from t006_pac_cargo " +
				    		"where cod_cargo_prodesp= ? && " +
				    		"referencia_de <=(" +
				    		"select cod_referencia from t008_pac_referencia_salarial " +	
				    		"where valor_"+h+"h= insert('?',length(?)-1,0,'.')) && " +
				    		"referencia_ate >=(" +
				    		"select cod_referencia from t008_pac_referencia_salarial where valor_40h=insert('?',length(?)-1,0,'.')))");
		    }
		    
		    sql.append(", cod_alocacao = (select cod_alocacao " +
		    		"from t019_pac_alocacao_gastos " +
		    		"where c_custo=?)");

Aqui eu seto os valores:

pstmt = con.prepareStatement(sql.toString());
		    
		    int i = 1;
		    pstmt.setString(i++, dadosFuncionario.get(0).toString().trim());
		    pstmt.setString(i++, dadosFuncionario.get(1).toString().trim());
	    	pstmt.setInt(i++, Integer.parseInt(dadosFuncionario.get(2).toString().trim()));
		    pstmt.setString(i++, dadosFuncionario.get(3).toString().trim().replaceAll("'","´"));
		    pstmt.setString(i++, dadosFuncionario.get(4).toString());
		    pstmt.setString(i++, dadosFuncionario.get(5).toString().trim().replaceAll("'","´"));		
		    pstmt.setString(i++, dadosFuncionario.get(8).toString().replaceAll("'","´"));
		    pstmt.setString(i++, dadosFuncionario.get(26).toString().trim().replaceAll("'","´"));
		    pstmt.setString(i++, dadosFuncionario.get(31).toString().trim());
		    pstmt.setString(i++, dadosFuncionario.get(32).toString().trim());
		    pstmt.setString(i++, dadosFuncionario.get(33).toString().trim());
		    pstmt.setString(i++, Integer.toString(Integer.parseInt(dadosFuncionario.get(34).toString()))); 
		    pstmt.setInt(i++, Integer.parseInt(dadosFuncionario.get(34).toString()));
		    pstmt.setString(i++, dadosFuncionario.get(35).toString().trim());
		    pstmt.setString(i++, dadosFuncionario.get(36).toString().trim());
		    pstmt.setInt(i++, Integer.parseInt(dadosFuncionario.get(37).toString().trim()));			    
		    pstmt.setString(i++, dadosFuncionario.get(43).toString().trim());
		    pstmt.setString(i++, dadosFuncionario.get(44).toString().trim());
		    
		    switch(Integer.parseInt(dadosFuncionario.get(46).toString().trim())) {
		    	case 2:
		    		pstmt.setString(i++, dadosFuncionario.get(45).toString().trim());
		    		break;
		    	case 3:
		    		pstmt.setString(i++, dadosFuncionario.get(45).toString().trim());
		    		break;			    	
		    	case 5:
		    		pstmt.setString(i++, dadosFuncionario.get(45).toString().trim());
		    		break;
		    	case 6:
		    		pstmt.setString(i++, dadosFuncionario.get(45).toString().trim());
		    		break;			         
		    	case 7:
		    		pstmt.setString(i++,dadosFuncionario.get(45).toString().trim());
		    		break;			    	
		    	case 9:
		    		pstmt.setString(i++, dadosFuncionario.get(45).toString().trim());
		    		break;			    	
		    	case 97:
		    		pstmt.setString(i++,dadosFuncionario.get(45).toString().trim());
		    		break;		    	
		    }
		    
		    if(h == 0){
		    	pstmt.setInt(i++, 0);		    	
		    }
		    else{
		    	
			    pstmt.setInt(i++, Integer.parseInt(dadosFuncionario.get(37).toString().trim()));
			    pstmt.setString(i++, Integer.toString(Integer.parseInt(dadosFuncionario.get(34).toString())));
			    pstmt.setInt(i++, Integer.parseInt(dadosFuncionario.get(34).toString()));
			  	pstmt.setString(i++, Integer.toString(Integer.parseInt(dadosFuncionario.get(34).toString())));
			  	pstmt.setInt(i++, Integer.parseInt(dadosFuncionario.get(34).toString()));			  	
		    }
		    
		    pstmt.setString(i++, dadosFuncionario.get(8).toString().replaceAll("'","´"));
		    
		    pstmt.setString(i++, dadosFuncionario.get(2).toString());
		  	
		  	pstmt.executeUpdate();

Não entendo isso, como pode ver no objeto sql uqe está sendo criado eu uso varios parametros.
Aguardo retorno.
Abraços!

Me parece que você está colocando os ? entre aspas… tente tirar as aspas.

ex.:

sql.append("EMPRESA = ?, ");

Realment galera comi bola com esse prepared statment.
Esqueci de tirar as aspas simples. Acho que vou sair do java e vou pro balé.
eheheheh
VAleu galera!