Postgres> erro: Retorno de chaves geradas automaticamente não é suportado

6 respostas
R

Alguem ajuda com esse erro?

estou querendo jogar o cliente recem inserido em jtextfields mas quando busco o código dele acontece esse erro:

Retorno de chaves geradas automaticamente não é suportado

Obrigado.

6 Respostas

Hebert_Coelho

Como você busca?

R
/**
     * Grava ou Altera um fornecedor
     * @param fornecedor
     * @return se conseguiu gravar/alterar retorna true
     */
    public Integer gravar(Fornecedor fornecedor)
    {
        
        String sql = null;
        Connection conn = null;
        PreparedStatement stmt = null;
        Util converte = new Util();
        ResultSet result = null;
        Integer codigoFornecedor = null;
        
        
        try
        {
            conn = Conexao.criarConexao();
            
            
            // Se Codigo for igual á ZERO então grava Dado
            if(fornecedor.getCodigo() == 0)
            {       
                //JOptionPane.showMessageDialog(null, converte.converteDataEmString(fornecedor.getDataCadastro()));
                sql = "INSERT INTO fornecedor (dataCadastro, nome, cnpj, "
                + "rua, bairro, cidade, uf, cep, telefone, email, contato, ativo)"
                + " VALUES ('" + fornecedor.getDataCadastro() +  "', '" +fornecedor.getNomeFantasia()+ "', '" +fornecedor.getCnpj()+ "', '" +fornecedor.getRua()+ "', '" 
                +fornecedor.getBairro()+ "', '" +fornecedor.getCidade()+ "', '" +fornecedor.getEstado()+ 
                "', '" +fornecedor.getCep()+ "', '" +fornecedor.getTelefone()+ "', '" 
                +fornecedor.getEmail()+ "', '" +fornecedor.getContato()+ "', '" + fornecedor.getAtivo() + "')";
            }
            else // Se nnão for igual a ZERO então altera dado
            {
                sql = "UPDATE fornecedor SET nome = '" +fornecedor.getNomeFantasia()+ "', cnpj = '" 
                + fornecedor.getCnpj() + "', rua = '" + fornecedor.getRua() + "', bairro = '" + fornecedor.getBairro() + "', cidade = '" 
                + fornecedor.getCidade() + "', uf = '" + fornecedor.getEstado() + "', cep = '" 
                + fornecedor.getCep() + "', telefone = '" + fornecedor.getTelefone() + "', email = '"
                + fornecedor.getEmail() + "', contato = '" + fornecedor.getContato() + "', ativo = '" +fornecedor.getAtivo()+ "' WHERE codigo = '" 
                + fornecedor.getCodigo() + "'";
            }
            
            //stmt = conn.prepareStatement(sql); // Cria ligação entre a aplicação e o banco de dados
            //ResultSet result = stmt.executeQuery(sql); // Executa uma atualização no banco de dados ( SQL )
            stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            stmt.executeUpdate();
            
            result = stmt.getGeneratedKeys();
            
            if(result.next())
                codigoFornecedor = result.getInt(1);
            JOptionPane.showMessageDialog(null, "" +codigoFornecedor);
            
        
        }
        catch(SQLException gravar) // Se algo deu errado então imprima
        {
            JOptionPane.showMessageDialog(null, "Não foi Possivel GRAVAR/ALTERAR os dados: (" + sql + ") Erro:" + gravar);
        }
        finally
        {
            Conexao.fecharConexao(conn, stmt, null); // Fecha Conexão com banco de dados(conn) é Statement (stmt)
        }
        
        return codigoFornecedor; 
    }
Hebert_Coelho

Faltou passar o ID? ou não tem?

R

ID é serial not null

somente no banco , mas… quero que retorne ele

Hebert_Coelho

robertorp:
ID é serial not null

somente no banco , mas… quero que retorne ele

Até onde eu sei o postgres funciona com sequence. Como a própria mensagem de erro disse, não existe geração automática de ID.

Procure no google como utilizar sequence do postgres.

R

Solucionei o problema…

Versão do meu postgres: postgresql-9.1.4-1-windows
Versão do driver que baixei: postgresql-9.2-1002.jdbc4

estes dois juntos funciona eu estava com um driver 9.1.1000 se não me engano…

enfin a solução ta ae se alguem precisar :slight_smile:

Obrigado.

Criado 14 de novembro de 2012
Ultima resposta 14 de nov. de 2012
Respostas 6
Participantes 2