Olá, Pablo! Tudo bem?
Sua contribuição é extremamente valiosa para a comunidade! O erro de Access denied é um dos obstáculos mais comuns para quem está iniciando com JDBC, e sua análise sobre caracteres especiais na URL de conexão toca em um ponto técnico muito importante.
Como Analista, você identificou corretamente que, ao embutir a senha diretamente na String da URL, caracteres como @, # ou & podem ser interpretados erroneamente pelo driver do banco de dados como parte da estrutura do protocolo, causando falha na autenticação.
Sua sugestão de utilizar o método DriverManager.getConnection com argumentos separados para usuário e senha é a melhor prática recomendada por vários motivos:
- Segurança de Sintaxe: Passar as credenciais como parâmetros isolados garante que o driver trate a senha como um dado puro, sem risco de interferir nos parâmetros da URL (como
useSSL ou serverTimezone). - Organização do Código: O código fica visivelmente mais limpo, separando o endereço do servidor (URL) das credenciais de acesso.
- Flexibilidade: Essa estrutura facilita muito a evolução para o uso de variáveis de ambiente, o que evita deixar senhas expostas diretamente no código-fonte em projetos reais.
Dica Técnica Adicional:
Além da solução que você apresentou, se o erro persistir mesmo com a senha correta, vale verificar se o usuário do banco (ex: root) tem permissão de acesso para o host específico que aparece na mensagem de erro (no seu exemplo, @'192.168.127.1'), já que o MySQL diferencia acessos de localhost de acessos via IPs de rede.
Parabéns pelo excelente nível de compartilhamento e pelo impressionante XP na plataforma! É esse tipo de proatividade que ajuda a elevar o nível técnico de todos os alunos.
Espero que sua dica ajude muitos colegas que passarem por esse desafio!