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.
Mas quando tendo realizar o insert via aplicação ocorre o erro descri acima. Segue o código em java.
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"?
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
Curtir tópico
+ 0
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
Responder
Mais Posts
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.
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
Clique aqui para fazer login e interagir na Comunidade :)