(nomedasequence.nextval)
Deste jeito não funciona no java só funciona no sql do banco. No java o banco dá erro de nome de coluna inválido acho que é por que ele entende como string e não como um comando sql.
Eu sou novato em java não tenho muito conhecimento
de como as classes trabalham internamente mas estou etudando.
O que preciso alterar no código para poder funcionar?
Obrigado
Precisas passar a sequence dinamicamente? Se estiver na string, vai executar (eu acho) normalmente.
Outra coisa que podes fazer é pegar a sequence através de um select e depois colocar no insert.
Tá difícil cara, de repente a solução é simples
mas tem coisas que a gente tem que quebrar a
cabeça mesmo por que é assim que se aprende.
É a segunda vez que tenho esse tipo de problema. Na
primeira além da sequence também tive o mesmo problema
ao passar uma data para um campo tipo DATE na tabela do BD.
Eu queria chamar a sequence dinamicamente na aplicação mas a minha cabeça já ferveu. Sei que isso não é uma boa prática mas por enquanto vou inserir o código manualmente.
vai no seu banco de dados da oracle e cria a sua sequence
CREATE SEQUENCE guj_id
START WITH 1000
INCREMENT BY 1
e no insert vc poe ela assim
INSERT INTO tabela(id, nome, sobrenome)
VALUES(guj_id.NEXTVAL, 'Lucas', 'Souza');
cara, comigo isso nunca falhou, eu estava usando isso ateh meu ODBC do oracle trava
e sempre deu certo
Outro modo: “Transformar” sua coluna ID em auto-increment através de uma Trigger. Você consegue achar o código dessa trigger com facilidade na internet.
E depois…
insert into TB_PESSOAS (NOME, SOBRENOME) values ('Joao', 'Silva')
Galera, valeu pela força.Depois de tanto esquentar a cabeça consegui resolver.
na minha classe de teste eu criei uma conexão para executar o select que pega o próximo valor da trigger e depois eu chamei o método setId() e passei pra ele o valor retornado pelo método getId(). Belezinha.
Ficou meio nebuloso mas está funcionando direitinho.
Vou ver se melhoro o código depois.
Assim ficou a classe: Vide comentários
package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
public class TestaInsere {
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
//faz a conexão para pegar o próximo valor da sequence
Connection connection;
connection = ConnectionFactory.getConnection();
PreparedStatement pstm2 = connection
.prepareStatement("select sec_contatos.nextval from dual");
Contato contato = new Contato();
ResultSet res = pstm2.executeQuery();
//pega o valor recuperado pela query e seta ele através do método setId()
while (res.next()) {
contato.setId(res.getString(1));
}
res.close();
pstm2.close();
connection.close();
String nome = JOptionPane.showInputDialog("NOME");
String email = JOptionPane.showInputDialog("EMAIL");
String endereco = JOptionPane.showInputDialog("ENDEREÇO");
//seta o restante das variáveis da classe recuperadas com swing
contato.setNome(nome);
contato.setEmail(email);
contato.setEndereco(endereco);
ContatoDAO dao = new ContatoDAO();
//chama o método adiciona do objeto dao e passa o objeto do tipo Contatos para o método adiciona
dao.adiciona(contato);
System.out.println(contato.getId());
JOptionPane.showMessageDialog(null, "Registro Gravado com Sucesso!!!",
"Confirmação", 1);
}
}
Um grande abraço a todos e um bom fim de semana tb