java – El índice de la columna está fuera de rango: 2, número de columnas: 1

estoy tratando de usar mi metodo update para modificar unos datos de una tabla

if (connection != null){
            String sql = "update usuarios set usuario = '?',contrasena = '?' where id = ?";

            try {
                PreparedStatement statement = connection.prepareStatement(sql);
                System.out.print(statement);
                statement.setString(1, usuario.getUsuario());
                statement.setString(2, usuario.getContrasena());
                statement.setInt(3, usuario.getId());
                System.out.println("statement: "+ statement.executeUpdate());
                if (statement.executeUpdate() == ACCEPT){
                    resultado = true;
                }
            } catch (SQLException e){
                e.printStackTrace();
            }
        }
        return resultado;

a la hora de querer modificar los datos de mi tabla me marca este error

org.postgresql.util.PSQLException: El índice de la columna está fuera de rango: 2, número de columnas: 1.
    at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:69)
    at org.postgresql.core.v3.SimpleParameterList.setStringParameter(SimpleParameterList.java:132)
    at org.postgresql.jdbc.PgPreparedStatement.bindString(PgPreparedStatement.java:1055)
    at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:356)
    at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:342)

estuve buscando respuesta a este problema y en todos es por que la sentencia sql esta mal implementada y lo corrigen a la forma que yo ya la tengo asi que no encuentro error en mi logica. si alguien podria ayudarme seria de mucha ayuda gracias