JAVA - Insert aplicação usando banco Oracle.
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
Curtidas 0
Melhor post
Eloisa Cruz
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 />
GOSTEI 3
Mais Respostas
Fernando C
01/04/2018
oracle não tem auto-increment
pesquise sobre sequences
pesquise sobre sequences
GOSTEI 0
Jean Dionizio
01/04/2018
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.
GOSTEI 0