private int insert(Funcionario f) {
        Connection con = null;
        PreparedStatement pstm = null;
        int retorno = -1;
        try {

            //con = guarda a conexão aberta no connectionFactory
            con = ConnectionFactory.getConnection();
            //pstm = manda um sql para o banco
            pstm = con.prepareStatement(INSERT, Statement.RETURN_GENERATED_KEYS);
            //(nome, login, senha, telefone, celular, cargo, data_nascimento, rg, endereco, cidade, estado)
            pstm.setString(1, f.getNome());
            pstm.setString(2, f.getLogin());
            pstm.setString(3, f.getSenha());
            pstm.setString(4, f.getTelefone());
            pstm.setString(5, f.getCelular());
            pstm.setString(6, f.getCargo());
            pstm.setDate(7, new java.sql.Date(f.getDataNascimento().getTime()));
            pstm.setString(8, f.getRg());
            pstm.setString(9, f.getEndereco());
            pstm.setString(10, f.getCidade());
            pstm.setString(11, f.getEstado());

            pstm.execute();
            try (ResultSet rs = pstm.getGeneratedKeys()) {
                if (rs.next()) {
                    retorno = rs.getInt(1);
                }
            }

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao inserir: " + e.getMessage());
        } finally {
            try {
                ConnectionFactory.closeConnection(con, pstm);
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro ao finalizar conexão em inserir: " + ex.getMessage());
            }
        }
        return retorno;
    }