[RESOLVIDO] Erro java.sql.SQLException

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;