Olá!
Estou tentando efetuar uma inserção no Oracle XE 11, porém via código não estou conseguindo.
Quando eu copio exatamente o que passo e coloco via terminal, consigo inserir na tabela, entretanto ao executar meu código ele retorna o erro “Índice de coluna inválido”.
O código de inserção é este:
public void registerUser(Usuario usuario) throws Exception {
super.open();
stmt = con.prepareStatement("INSERT INTO USUARIO VALUES (null, '?', '?', '?');");
stmt.setString(1, usuario.getNome());
stmt.setString(2, usuario.getEmail());
stmt.setString(3, usuario.getSenha());
stmt.execute();
stmt.close();
super.close();
}
e criei da seguinte forma a tabela:
CREATE TABLE usuario (ID NUMBER(10) NOT NULL, NOME VARCHAR2 (50) NOT NULL, EMAIL VARCHAR2 (50) UNIQUE NOT NULL, SENHA VARCHAR2 (12) NOT NULL);
ALTER TABLE usuario ADD (CONSTRAINT usuario_pk PRIMARY KEY(ID));
CREATE SEQUENCE usuario_seq START WITH 1;
CREATE OR REPLACE TRIGGER usuario_bir
BEFORE INSERT ON usuario
FOR EACH ROW
BEGIN
SELECT usuario_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
Cerca de meia hora da minha vida perdida para descobrir que não é necessário colocar aspas simples, nem ponto e vírgula ao final do prepareStatement. Bom, acredito que pelo menos não me esquecerei mais aihauhuaa.
stmt = con.prepareStatement("INSERT INTO USUARIO VALUES (null, ?, ?, ?)");