Olá amigos!
Estou penando para resolver um problema de inserção no banco de dados.
O erro aparece quando eu tento gravar em uma tabela do banco.
java.sql.SQLException Violation of PRIMARY KEY constraint ‘PK_Mensagens’. Cannot insert duplicate key in object ‘Mensagens’
O problema que não coloquei chave primária nos campos, além disso consigo incluir diretamente no banco, usando o mesmo comando SQL.
O problema surge exatamente no momento de dar o ps.ExecuteQuery();
Segue o pedaço do programa que gera o erro:
public static void insert(Mensagens mensagem) throws SQLException{
ps = DBConnectionVoxySMS.prepareStatement(sqlAdd);
ps.setInt(1, mensagem.getIdMensagem());
ps.setString(2, mensagem.getMensagem());
ps.executeQuery();
}
Segue a linha do sqlAdd
private static String sqlAdd = "Insert INTO Mensagens Values (?,?)";
Vocês têm alguma ideia do que pode ser isso?!
Agradeço a ajuda!
Parece que você está tentando inserir um valor já existente numa coluna que é uma Primary Key, ou seja, não aceita valores duplicados.
A mensagem está estranha pra isso, mas pode ser porque você está usando um executeQuery em vez de executeUpdate / execute.
Troca a linha:
ps.executeQuery();
por:
ps.executeUpdate();
e vê se funfa…
Olá Victor!
Alterei conforme você me disse, mas continua gerando exatamente o mesmo erro…
O que mais pode ser?!
Isso ai ta estranho… você disse que não criou chave primária mas a mensagem informa o nome da constraint que indica um PK.
A mensagem é muito clara… tem que ser algo relativo a duplicidade de PKs na inserção, confere isso direitinho ai.
Pois é… acho que vou apagar a tabela e criar novamente, só para testar.
volto a postar os resultados.
Obrigado!
Pode ser o famoso erro - todos cometemos esse erro pelo menos uma vez - de estar apontando para o ambiente errado.
Já vi muitas vezes o problema de você estar usando o comando SQL (usando alguma ferramenta como o Oracle SQL Developer) e usando o banco de homologação, enquanto o programa que está tendo problemas está usando o banco de desenvolvimento e os bancos estão configurados de maneira diferente. Infelizmente, muitas vezes só o DBA é que pode verificar se as tabelas estão configuradas de maneira similar ou igual ou não.
Pois é… tem coisa às vezes que está na cara da gente e precisa alguém de fora para nos lembrar de alguns “detalhes”.
Resolvi o problema apagando a tabela do banco e recriando.
Eu utilizo o SQLLite (que está cherio de bug) para fazer a manunteção no banco SQLServer e acho que por algum motivo a tabela ficou “zuada”.
Agora está funcionando certinho! Mesmo sem saber exatamente o que estava ocorrendo.
Agradeço muito a ajuda de todos!
Um abraço!
Dica: Utilize uma sequence
CREATE SEQUENCE sqTabela
MINVALUE 1
MAXVALUE 300
START WITH 1
INCREMENT BY 1
CACHE 20;