Nie powinieneś wywoływać executeQuery(String) na PreparedStatement , powinieneś wywołać executeQuery() zamiast. Jest to wyraźnie zabronione przez interfejs API JDBC, ale tylko przez przypadek (z powodu błędu składni) działa źle z MySQL Connector/J.
Pamiętaj, że Twoje aktualne zapytanie jest odpowiednikiem:
select * from matrix where metric_name = ?
Nie widzę powodu, dla którego miałbyś używać IN tutaj.