Para usar o JDBC para alterar a senha de um usuário Oracle, você precisa fazer duas coisas:
- coloque a senha diretamente na string SQL (parâmetros de ligação não podem ser usados),
- desative o processamento de escape.
Você não pode usar variáveis de ligação porque o nome de usuário e a senha não são enviados ao banco de dados como strings entre aspas simples.
O
?
na string SQL está sendo tomada como um marcador de posição da variável de ligação e, por causa disso, a string SQL está sendo desfigurada em algum momento pelo Oracle JDBC. Desabilitar o processamento de escape na instrução impede que isso aconteça. Tentar:Statement s = conn.createStatement();
s.setEscapeProcessing(false);
s.executeUpdate("ALTER user Stephen identified by \"newPassword?\" replace \"oldPassword\"");
Se você estiver definindo a senha programaticamente, seu código também deve garantir que as senhas novas e antigas não contenham nenhum
"
caracteres, para evitar injeção de SQL.