JAVA - Insert aplicação usando banco Oracle.

01/04/2018

0

Boa noite Pessoal,

Tenho uma aplicação que estou fazendo, mas no memento de realizar o insert apresenta o erro "Java.sql.SQLException: Índice de coluna inválido". Pensei que fosse pelo fato da chave primária pois o oracle não tem auto-increment, então fiz um trigger para realizar isso.

No banco esta assim a tabela.
CREATE TABLE tbusuarios (
  id_usuario NUMBER       NOT NULL,
  usuario    VARCHAR2(50) NOT NULL,
  telefone   VARCHAR2(15) NULL,
  login      VARCHAR2(15) NOT NULL,
  senha      VARCHAR2(15) NOT NULL,
  perfil     VARCHAR2(1)  NULL
)
CREATE OR REPLACE TRIGGER tbusuarios_trg
BEFORE INSERT ON tbusuarios FOR EACH ROW
BEGIN <<COLUMN_SEQUENCES>>
BEGIN
IF :NEW.ID_USUARIO IS NULL THEN
SELECT SEQ_TBUSUARIOS.NEXTVAL INTO :NEW.ID_USUARIO FROM DUAL;
END IF;
END COLUMN_SEQUENCES;
END;
/


Mas quando tendo realizar o insert via aplicação ocorre o erro descri acima. Segue o código em java.
    private int retornaID() {
        String sql = "SELECT SEQ_TBUSUARIOS.NEXTVAL FROM DUAL ";
        int idTabela = 0;

        try {
            pst = conexao.prepareStatement(sql);
            rs = pst.executeQuery();

            if (rs.next()) {
                idTabela = rs.getInt(1);
            } else {
                idTabela = 0;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error de ID");
        }
        return idTabela;

    }

    private void adicionar() {
        String sql = "INSERT INTO(ID_USUARIO,USUARIO,TELEFONE,LOGIN,SENHA,PERFIL) TBUSUARIOS VALUES(?,?,?,?,?,?)";

        try {
            pst = conexao.prepareStatement(sql);// pegando valor do campo e passando pro banco
            pst.setInt(1, retornaID());
            pst.setString(2, txtNome.getText());
            pst.setString(3, txtFone.getText());
            pst.setString(4, txtLogin.getText());
            pst.setString(5, txtSenha.getText());
            if (cmbPerfil.getSelectedItem().equals("Administrador")) {
                pst.setString(6, "A");
            } else {
                pst.setString(6, "U");
            }

            pst.executeUpdate();

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }


Coloquei a o código da função retornaID(), pois dela que eu estou pegando o próximo ID do banco.
Alguém sabe me dizer que erro sera este "Java.sql.SQLException: Índice de coluna inválido"?
Jean Dionizio

Jean Dionizio

Responder

Post mais votado

02/04/2018

Isso geralmente acontece quando você declara um número diferente de parâmetros e sets... Mas pelo que vi, você declarou 6 e setou 6.<br />

Eloisa Cruz

Eloisa Cruz
Responder

Mais Posts

02/04/2018

Fernando C

oracle não tem auto-increment

pesquise sobre sequences
Responder

02/04/2018

Jean Dionizio

Pois é procurei em vários outros fóruns já testei de tudo e até agora nada. Como dito por vocês, deixei a mesma quantidade de parâmetros.
Referentes a sequence, já existe uma no banco que é ativada pela trigger.

Teste que já realizei e não deram certo.
1 - Deixar o mesmo nome do banco no fonte, neste caso tudo em caixa baixa.
2 - Tirar o set do ID passando somente 5 parâmetros e deixar isso para o banco fazer com a trigger.
3 - Fazer o insert sem sequence e trigger, colocando o Id de forma manual.

A conexão com o banco está ok, por que consigo pesquisar usuários e já peguei os mesmos parâmetros e fiz o insert via banco e funcionou só na aplicação que não.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar