Rozwiązany, zapomniałem dodać kodowanie podczas inicjowania połączenia:
wcześniej było:
con = DriverManager.getConnection("jdbc:mysql:///dbname", "user", "pass");
teraz (działa):
con = DriverManager.getConnection("jdbc:mysql:///dbname?useUnicode=true&characterEncoding=utf-8", "user", "pass");