Erro inserção no banco!

  • Gente eu to capturando um erro no meu try catch na hora que eu faço a inserção no banco . Sendo que tenhos duas tabelas que tem akele lance de chave primaria sendo que tem campos que tem nas duas tabelas(chave estrangeira) .

  • Ele faz a inserção na primeira tabela so ke na segunda da erro … :sad:

  • O erro que aparece é este -------> “Índice de coluna inválido”

  • Alguem pode me indicar onde pode estar ocorrendo este erro !?

  • Que ja dei uma olhada em tudo !!!

Poste o código onde vc obtem o erro pra gente ver…

este é o meu dao

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import br.gov.am.tce.sap.dao.filtro.FiltroHistoricoCargo;
import br.gov.am.tce.sap.dao.interfaces.InterfaceDAOHistoricoCargo;
import br.gov.am.tce.sap.vo.VOHistoricoCargo;

/*
 * Classe DAOHistoricoCargo que implementa a interface
 * InterfaceDAOHistoricoCargo
 */
public class DAOHistoricoCargo implements InterfaceDAOHistoricoCargo {

	// Instancia nula da classe DAOHistoricoCargo
	private static DAOHistoricoCargo singleton = null;

	/*
	 * Construtor vazio
	 */
	private DAOHistoricoCargo() {

	}

	/*
	 * Metodo que retorna uma instancia da classe DAOHistoricoCargo, garantindo
	 * que a mesma so tera uma instancia criada
	 */
	public static DAOHistoricoCargo getInstancia() {

		if (singleton == null) {
			singleton = new DAOHistoricoCargo();
		}

		return singleton;
	}

	/*
	 * Metodo responsavel pela inclusao de dados na tabela HISTORICO_CARGO.
	 * Recebe como parametro um objeto da classe VOHistoricoCargo que contem os
	 * dados referentes aos campos que serao inseridos na tabela.
	 */
	public void incluir(VOHistoricoCargo pVOHistoricoCargo) throws SQLException {
		
		PreparedStatement prepStatement = null;

		String sql = "INSERT INTO TBL_HISTORICO_CARGO (COD_CARGO , DAT_INCLUSAO , DAT_PUBLICACAO_LEI , DAT_VIGENCIA , DES_LOGIN , NUM_ANO_COMPETENCIA , NUM_LEI_AUTORIZATIVA , NUM_MES_COMPETENCIA , NUM_TIPO_ATUALIZACAO , NUM_UG , QTD_VAGAS_FIXADAS_LEI ) VALUES (?,SYSDATE,SYSDATE,SYSDATE,?,?,?,?,?,?,?)";

		try {
			// Estabelecimento da conexao com o banco de dados
			Connection conexao = ControladorConexao.abrirConexao();

			// Parametrizacao do comando sql
			prepStatement = conexao.prepareStatement(sql);
			prepStatement.setString(1, pVOHistoricoCargo.getCod_cargo());
			prepStatement.setDate(2, pVOHistoricoCargo.getDat_inclusao());
			prepStatement.setDate(3, pVOHistoricoCargo.getDat_publicacao_lei());
			prepStatement.setDate(4, pVOHistoricoCargo.getDat_vigencia());
			prepStatement.setString(5, pVOHistoricoCargo.getDes_login());
			prepStatement.setInt(6, pVOHistoricoCargo.getNum_ano_competencia());
			prepStatement.setString(7, pVOHistoricoCargo.getNum_lei_autorizativa());
			prepStatement.setInt(8, pVOHistoricoCargo.getNum_mes_competencia());
			prepStatement.setInt(9, pVOHistoricoCargo.getNum_tipo_atualizacao());
			prepStatement.setInt(10, pVOHistoricoCargo.getNum_ug());
			prepStatement.setInt(11, pVOHistoricoCargo.getQtd_vagas_fixadas_lei());
			prepStatement.executeUpdate();

			prepStatement.close();

			conexao.close();

			System.out.println("Historico do Cargo Incluido com Sucesso!!!");
		
		} catch (SQLException e) {
			throw new SQLException(e.getMessage());
		}

	}
}
 Acao onde eu isiros os valor pra mandar pro banco !
public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {

		VOCargo voCargo = null;
		VOHistoricoCargo voHistoricoCargo = null;
		FormularioInclusaoCargo fExibirInclusaoCargo = (FormularioInclusaoCargo) form;

		System.out.println("Acao de Exibir Inclusao de Cargos...");
		
		try {
voHistoricoCargo = new VOHistoricoCargo();
voHistoricoCargo.setCod_cargo(fExibirInclusaoCargo.getCod_cargo());
voHistoricoCargo.setDat_inclusao(Fachada.getInstancia().getStringToData("01-05-1984"));	voHistoricoCargo.setDat_publicacao_lei(Fachada.getInstancia().getStringToData(fExibirInclusaoCargo.getDat_publicacao_lei()));	voHistoricoCargo.setDat_vigencia(Fachada.getInstancia().getStringToData(fExibirInclusaoCargo.getDat_vigencia()));
voHistoricoCargo.setDes_login(fExibirInclusaoCargo.getDes_login());
voHistoricoCargo.setNum_ano_competencia(2006);
voHistoricoCargo.setNum_lei_autorizativa(fExibirInclusaoCargo.getNum_lei_autorizativa());
voHistoricoCargo.setNum_mes_competencia(12);
voHistoricoCargo.setNum_tipo_atualizacao(1);
voHistoricoCargo.setNum_ug(809);
voHistoricoCargo.setQtd_vagas_fixadas_lei(Integer.parseInt(fExibirInclusaoCargo.getQtd_vagas_fixadas_lei()));
Fachada.getInstancia().incluirCargo(voCargo, voHistoricoCargo);
			
			request.setAttribute("msg","Cargo incluído com sucesso na base de dados!");
	
		} catch (SQLException e) {

			if (e.getErrorCode() == 1) {
				System.out.println("Registro Duplicado!!!");
				request.setAttribute("erro","Cargo já cadastro na base de dados!");
				return mapping.findForward("Erro");

			} 
			
			if (e.getErrorCode() == 0) {
				
				System.out.println(e.getMessage());
				System.out.println(e.getLocalizedMessage());
				System.out.println(e.getStackTrace());
				e.printStackTrace();
				/*
				 * Mensagem exibida na pagina jsp que e mostrada ao usuario caso
				 * o cargo nao tenha sido atualizado corretamente
				 */
				request.setAttribute("erroConexaoServidorBD","Falha na conexao com o servidor!");
				/*
				 * Mapeamento da pagina jsp que sera exibida caso aconteca algum
				 * erro na atualizacao
				 */
				return mapping.findForward("ErroConexaoServidorBD");
			
			} else 
			        {
			         	request.setAttribute("erroServidorBD", "Falha na execução da operação. Tente novamente!");
				        return mapping.findForward("ErroServidorBD");
			}
}

Aí é quando exibe o erro de indice invalido !

Opa,

ainda não deu para identificar onde está o problema: passa o código deste método:

:okok:

  • Eu consegui verificar no debug qual seria o possivel problema .

  • O problema esta no dao do historico , sendo que ele nao ta conseguindo inserir o campo data no formato que ta no banco .

  • Creio eu que seja isso pois kuando chega na parte de inserir a data ele o debug passa direto e finaliza o processo !!!

  • Se tem algum exemplo de como incluir no banco um campo do tipo date no oracle ?

Opa,

tipo se você usar o os métodos setDate do PreparedStatement não terá diferenças ao usar quando você mudar de banco.

:okok: