Om JDBC te gebruiken om het wachtwoord van een Oracle-gebruiker te wijzigen, moet u twee dingen doen:
- zet het wachtwoord rechtstreeks in de SQL-string (bindparameters kunnen niet worden gebruikt),
- escape-verwerking uitschakelen.
U kunt geen bindvariabelen gebruiken omdat de gebruikersnaam en het wachtwoord niet als tekenreeksen tussen enkele aanhalingstekens naar de database worden verzonden.
De ?
in de SQL-string wordt genomen als een tijdelijke aanduiding voor een bindvariabele, en hierdoor wordt de SQL-string op een gegeven moment verminkt door Oracle JDBC. Als u de escape-verwerking voor de instructie uitschakelt, gebeurt dit niet. Probeer:
Statement s = conn.createStatement();
s.setEscapeProcessing(false);
s.executeUpdate("ALTER user Stephen identified by \"newPassword?\" replace \"oldPassword\"");
Als u het wachtwoord programmatisch instelt, moet uw code er ook voor zorgen dat de nieuwe en oude wachtwoorden geen "
bevatten tekens, om SQL-injectie te voorkomen.