Erro de indice de coluna invalido

6 respostas
H

Preciso da ajuda de voces, estou tentando efetuar uma insert, porem esta explodindo o erro índice de coluna invalido.

Segue o código do insert

this.insertSQL(“INSERT INTO AUDITORIA_POS_HILA (ID,NR_FATURA,CD_UNIMED,ANO,PERIODO,CD_TRANSACAO,CD_UNIDADE_CARTEIRA,CD_CARTEIRA_USUARIO,NM_USUARIO,DT_EMISSAO,DT_AUDITORIA,DT_CONFIRMACAO,DT_VALIDADE_AUDITORIA,NR_DOC_ORIGINAL,CODIGO_PROC,DESCRICAO_PROC,QT_PROCEDIMENTO,QT_GLOSADA,VL_UNITARIO,VL_COBRADO,VL_GLOSADO,VL_TOTAL_APAGAR,VL_REAL_APAGAR,STATUS_AUDITORIA,OBSERVAVAO_AUDITORIA,CONFIRMA_ACAO,CONFIRMADO_POR,AUDITADO_POR,LETRA_NA_FATURA,CHAR_2) VALUES (”+idGerar+",’"+nrFaturaGerar+"’,’"+unimedGerar+"’,’"+anoGerar+"’,’"+mesGerar+"’,’"+transacaoGerar+"’,’"+unidadeCarteiraGerar+"’,’"+carteiraBenfGerar+"’,’"+nomeBenfGerar+"’,’"+dateEmissao+"’,’"+dataAuditoraGerar+"’,’"+dataConfirmacaoGerar+"’,’"+date+"’,"+nrDocumentoGerar+",’"+cdProcedimentoGerar+"’,’"+dscProcedimentoGerar+"’,’"+qtProcedimentoGerar+"’,’"+qtGlosadaGerar+"’,’"+valorUnitarioGerar+"’,’"+valorCobradoGerar+"’,’"+valorGlosadoGerar+"’,’"+valorTotalPagarGerar+"’,’"+valorRealPagarGerar+"’,’"+statusGerar+"’,’"+observacaoAudiGerar+"’,’"+confirmaAcaoGerar+"’,’"+confirmadadoPorGerar+"’,’"+auditadoPorGerar+"’,’"+letraFaturaGerar+"’,’"+char_2Gerar+"’)");`

Segue o erro:

java.sql.SQLException: Índice de colunas inválido
	at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
	at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445)
	at oracle.jdbc.driver.OracleResultSetImpl.getInt(OracleResultSetImpl.java:698)
	at geradorauditoriapos.conexao.ConexaOracle.insertSQL(ConexaOracle.java:76)
	at DAO.GeraAudDAO.salvarNovaTabelaDAO2(GeraAudDAO.java:835)
	at controller.GeraAudController.salvarNovaTabelaControler2(GeraAudController.java:39)
	at telas.ContasInter.carregaTabela(ContasInter.java:828)
	at telas.ContasInter.verificaFaturaJaexistente(ContasInter.java:502)
	at telas.ContasInter.carregaVerificacaoFaturaExistente(ContasInter.java:518)
	at telas.ContasInter.gerarTxtBtnActionPerformed(ContasInter.java:2403)
	at telas.ContasInter.access$700(ContasInter.java:40)
	at telas.ContasInter$9.actionPerformed(ContasInter.java:1215)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6535)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6300)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4891)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4713)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
	at java.awt.Container.dispatchEventImpl(Container.java:2280)
	at java.awt.Window.dispatchEventImpl(Window.java:2750)
Conexão obtida com sucesso no banco ORACLE.
	at java.awt.Component.dispatchEvent(Component.java:4713)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

6 Respostas

H

Me ajudem por favor.

L

Pegue o INSERT e execute-o diretamente no banco até funcionar, depois coloque-o no código novamente.

D

Esse tipo de codificação, deve ser evitada!

Organize seu código SQL e trabalhe com os paramentos (?), é simples e você consegue detectar o erro facilmente, exemplo:

PreparedStatement st = connection
          .prepareStatement("SELECT * FROM contas where usuario=? and senha=? limit 1");
        
st.setString(1, usuario);
st.setString(2, senha);

Verifique como fica muito mais organizado e lógico! esse monte de aspas abertas concatenadas expõe seu código a falha de segurança e erros como esse!

H

Vlw pela resposra… fiz isso via banco sem alterar nada e funcionou via banco, porem via codigo nao…

H

Dragoon obrigado pela ajuda.

Utilizei o spring como voce disse, resolveu o problema…

Java é complicado trabalhar com concatenações,

segue o codigo com a solução:

String insertSQL = "INSERT INTO AUDITORIA_POS_HILA "
                      + "(ID,NR_FATURA,CD_UNIMED,ANO,PERIODO,CD_TRANSACAO,CD_UNIDADE_CARTEIRA,CD_CARTEIRA_USUARIO,NM_USUARIO,DT_EMISSAO,DT_AUDITORIA,DT_CONFIRMACAO,DT_VALIDADE_AUDITORIA,NR_DOC_ORIGINAL,CODIGO_PROC,DESCRICAO_PROC,QT_PROCEDIMENTO,QT_GLOSADA,VL_UNITARIO,VL_COBRADO,VL_GLOSADO,VL_TOTAL_APAGAR,VL_REAL_APAGAR,STATUS_AUDITORIA,OBSERVAVAO_AUDITORIA,CONFIRMA_ACAO,CONFIRMADO_POR,AUDITADO_POR,LETRA_NA_FATURA,CHAR_2) "
                      + "VALUES "
                      + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
 
  // create the mysql insert preparedstatement
  PreparedStatement preparedStmt = conn.prepareStatement(insertSQL);
  preparedStmt.setString (1, idGerar);
  preparedStmt.setString (2, nrFaturaGerar);
  preparedStmt.setString (3, unimedGerar);
  preparedStmt.setString (4, anoGerar);
  preparedStmt.setString (5, mesGerar);
  preparedStmt.setString (6, transacaoGerar);
  preparedStmt.setString (7, unidadeCarteiraGerar);
  preparedStmt.setString (8, carteiraBenfGerar);
  preparedStmt.setString (9, nomeBenfGerar);
  preparedStmt.setDate   (10, dateEmissao);
  preparedStmt.setString (11, dataAuditoraGerar);
  preparedStmt.setString (12, dataConfirmacaoGerar);
  preparedStmt.setDate   (13, date);
  preparedStmt.setString (14, nrDocumentoGerar);
  preparedStmt.setString (15, cdProcedimentoGerar);
  preparedStmt.setString (16, dscProcedimentoGerar);
  preparedStmt.setString (17, qtProcedimentoGerar);
  preparedStmt.setString (18, qtGlosadaGerar);
  preparedStmt.setString (19, valorUnitarioGerar);
  preparedStmt.setString (20, valorCobradoGerar);
  preparedStmt.setString (21, valorGlosadoGerar);
  preparedStmt.setString (22, valorTotalPagarGerar);
  preparedStmt.setString (23, valorRealPagarGerar);
  preparedStmt.setString (24, statusGerar);
  preparedStmt.setString (25, observacaoAudiGerar);
  preparedStmt.setString (26, confirmaAcaoGerar);
  preparedStmt.setString (27, confirmadadoPorGerar);
  preparedStmt.setString (28, auditadoPorGerar);
  preparedStmt.setString (29, letraFaturaGerar);
  preparedStmt.setString (30, char_2Gerar); 

  // execute the preparedstatement
  preparedStmt.execute();
  
  conn.close();
}
D

E outra coisa olha que código agradável para dar manutenção … !!!

Criado 4 de agosto de 2016
Ultima resposta 4 de ago. de 2016
Respostas 6
Participantes 3