PreparedStatements - это путь, потому что они делают невозможным SQL-инъекцию. Вот простой пример ввода пользователя в качестве параметров:
public insertUser(String name, String email) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = setupTheDatabaseConnectionSomehow();
stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
stmt.setString(1, name);
stmt.setString(2, email);
stmt.executeUpdate();
}
finally {
try {
if (stmt != null) { stmt.close(); }
}
catch (Exception e) {
// log this error
}
try {
if (conn != null) { conn.close(); }
}
catch (Exception e) {
// log this error
}
}
}
Независимо от того, какие символы имеют имя и адрес электронной почты, эти символы будут помещены непосредственно в базу данных. Они никак не влияют на инструкцию INSERT.
Существуют разные методы набора для разных типов данных, которые вы используете, зависит от того, какие поля вашей базы данных. Например, если в базе данных имеется столбец INTEGER, вы должны использовать метод setInt
. В документации PreparedStatement перечислены все доступные методы настройки и получения данных.