В последней строке вы снова передали строку sql, минуя подготовленную функциональность оператора. Просто измените последнюю строку на это:
st1.executeUpdate();
PreparedStatement расширяет Statement, поэтому executeUpdate (String) по-прежнему доступен, однако вы не используете его обычно, поскольку объект знает, что имеет sql, вместо этого вы используете executeUpdate ().