Lo scopo delle dichiarazioni preparate è, tra l'altro, di non concatenare le tue domande da solo.
Vuoi fare quanto segue:
//first you "prepare" your statement (where the '?' acts as a kind of placeholder)
PreparedStatement st = con.prepareStatement("insert into user (user,age,school,password) values (?,?,?,?);");
//now you bind the data to your parameters
st.setString(1, user);
...
//and then you can execute it
st.executeUpdate()
Per maggiori dettagli, vedere il tutorial ufficiale .
Dietro le quinte accadono un paio di cose che rendono la query sicura, come l'escape di caratteri speciali che altrimenti consentirebbero di alterare l'istruzione (Google SQL injections se vuoi saperne di più)