De acordo com a documentação do driver MySQL JDBC você também precisa definir a codificação de caracteres na URL de conexão JDBC. Aqui está um exemplo:
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
Caso contrário, o driver MySQL JDBC usará a codificação padrão da plataforma para converter os caracteres em bytes antes de enviar pela rede, que no seu caso aparentemente não é UTF-8. Todos os caracteres descobertos serão substituídos por pontos de interrogação.
Além disso, ao recuperar os dados, você precisa garantir que o console/arquivo onde você está exibindo/escrevendo os caracteres também suporta/usa UTF-8. Caso contrário, eles se tornarão pontos de interrogação também. Como corrigir isso depende de como/onde você está exibindo/escrevendo esses caracteres.
Veja também:
A propósito, você não precisa do
SET NAMES
consulta aqui.