Le but des instructions préparées est, entre autres, de ne pas concaténer soi-même ses requêtes.
Vous voulez faire ce qui suit :
//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()
Pour plus de détails, consultez le tutoriel officiel .
Il y a quelques choses qui se passent dans les coulisses qui rendent la requête sûre, comme échapper des caractères spéciaux qui permettraient autrement de modifier l'instruction (injections Google SQL si vous voulez en savoir plus)